【问题标题】:Reshape function output size is unknown重塑函数输出大小未知
【发布时间】:2015-05-08 23:53:00
【问题描述】:

我正在使用 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=10nhidden=8nout=1,此函数覆盖网。非常感谢任何帮助。

【问题讨论】:

  • 如果它解决了您的问题,请查看我编辑的答案...

标签: matlab compilation reshape matlab-coder


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的帮助。我无法定义该字段,因为此函数不是我项目的入口文件。正如你猜到的,我不知何故将 nout 和 nin 设置为入口文件中的一些固定值。我按照你的建议将它们定义为函数的输入,它工作得很好!
  • 那么也许你可以在这里找到一些提示:mathworks.com/help/fixedpoint/ug/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 2021-02-27
相关资源
最近更新 更多