在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测试代码。
答案 0 :(得分:4)
不确定您拥有哪个版本的工具箱,但isposint(v)
的修订版1.7会测试这样的参数:
[...]
if ~isa(v,'double') | any(size(v) ~= [1 1]) | ...
~isreal(v) | v<0 | round(v) ~= v
[...]
这意味着它将返回false
以查找非double
或double
的子类的所有内容。
对于“未定义的函数或变量'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