重塑功能输出大小未知

时间:2015-05-08 23:53:01

标签: matlab compilation reshape matlab-coder

我使用Matlab编码器将一些 .m 文件编译成C静态库。在下面的函数中,我收到以下错误:

 function net = mlpunpak(net, w)
    nin = net.nin;
    nhidden = net.nhidden;
    nout = net.nout;

    mark1 = nin*nhidden;
    net.w1 = reshape(w(1:mark1), nin, nhidden);          % Error1 ***
    mark2 = mark1 + nhidden;
    net.b1 = reshape(w(mark1 + 1: mark2), 1, nhidden);   % Error2 ***
    mark3 = mark2 + nhidden*nout;
    net.w2 = reshape(w(mark2 + 1: mark3), nhidden, nout);% Error3 ***
    mark4 = mark3 + nout;
    net.b2 = reshape(w(mark3 + 1: mark4), 1, nout);      % Error4 ***
  

错误1:尺寸1固定在左侧,但在   右([10 x 8]〜= [:?x:?])。错误2:尺寸1固定在   左侧但在右侧变化([8 x 1]〜= [:?x:?])。   错误3:尺寸1固定在左侧,但在   右([8 x 1]〜= [:?x:?])。错误4:尺寸2固定在   左侧但在右侧变化([1 x 1]〜= [1 x:?])。

变量的值是 nin = 10 nhidden = 8 nout = 1 ,此函数会覆盖<的文件强>净即可。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

我认为你在某处修改了字段w1, b1, w2, b2。在这种情况下,您使用variable-size array作为reshape的输入,这会导致问题。看看this

更新:好的,我想我解决了错误。在Matlab编码器的Overview选项卡中,我尝试将字段定义为具有unbounded维度的double矩阵。哎呀,Code generation successful: View report: - )

顺便说一下,在错误2中,我认为这是你的错,因为reshape的输出应该是1x8,你必须自己检查一下你的算法。< / p>

enter image description here