为什么feedforwardnet(int32(8))引发错误而feedforwardnet(double(8))没有?

时间:2013-04-11 21:18:55

标签: neural-network matlab

在MATLAB中,feedforwardnet(8)创建了一个前馈网络,其中一个隐藏层包含8个隐藏神经元。 MATLAB将数值数据存储为双精度浮点(双精度)by default。因此feedforwardnet(8)相当于feedforwardnet(double(8))

但是,feedforwardnet(int32(8))会引发以下错误:

Undefined function or variable 'ind'.

Error in network/subsasgn>setLayerSize (line 1170)
  err = sprintf('"layers{%g}.size" must be a positive integer.',ind);

Error in network/subsasgn>network_subsasgn (line 180)
        if isempty(err), [net,err] = setLayerSize(net,i,newSize); end

Error in network/subsasgn (line 13)
net = network_subsasgn(net,subscripts,v,netname);

Error in feedforwardnet>create_network (line 116)
      net.layers{i}.size = param.hiddenSizes(i);

Error in feedforwardnet (line 69)
    net = create_network(param);

为什么feedforwardnet()不会以int32作为参数?等效地,为什么isposint()(在* network / subsasgn.m,第1169行中){}返回true作为参数?

使用MATLAB 2011a,2012a和2012b测试代码。

2 个答案:

答案 0 :(得分:4)

不确定您拥有哪个版本的工具箱,但isposint(v)的修订版1.7会测试这样的参数:

[...]
if ~isa(v,'double') | any(size(v) ~= [1 1]) | ...
  ~isreal(v) | v<0 | round(v) ~= v
[...]

这意味着它将返回false以查找非doubledouble的子类的所有内容。

对于“未定义的函数或变量'ind'。”消息,我的猜测是因为代码中的错误(变量ind未创建/分配/作为参数传递给函数中的任何地方。)

答案 1 :(得分:1)

第9行编辑(风险自负,未经过彻底测试)isposint.m

% if ~isa(v,'double') | any(size(v) ~= [1 1]) | ...
if ~isnumeric(v) | any(size(v) ~= [1 1]) | ...

两者都经过:

a = feedforwardnet(8);
b = feedforwardnet(int32(8));

尺寸变化不大:

>> whos
  Name      Size            Bytes  Class      Attributes

  a         1x1             31224  network              
  b         1x1             30968  network