在MATLAB中,feedforwardnet(8)
创建一个包含8个隐藏神经元的隐藏层的前馈网络。 MATLAB将数字数据存储为双精度浮点数(双精度)by default。因此feedforwardnet(8)
相当于feedforwardnet(double(8))
。为什么feedforwardnet(int32(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()
(in * network/subsasgn.m,第1169行))在给定int32(8)
作为参数时返回true
?
该代码已经用MATLAB 2011a,2012a和2012b进行了测试。
感谢:
尺寸变化不大,但是如果参数是int32(或int8/int64),返回false是什么意思?我觉得拒绝int32说这个函数需要一个整数是很奇怪的。 – 2013-04-11 22:22:04
我必须承认,我不知道作者在使用'isa(v,'double')'而不是'ISNUMERIC(ⅴ)'。可能是因为使用双精度浮点数来快速执行某些库,而其他数字类型需要转换为double,这需要时间。或者,也许作者想避免追逐由混合整数/浮点算术引起的潜在错误的痛苦,并强制执行一个独特的类型来处理。或者,也许这是作者用于测试这种类型值的Matlab惯用法。 – 2013-04-11 22:38:47
@FranckDernoncourt这是因为,无论何时使用“double”以外的类型进行算术运算,matlab都会将结果转换回该类型。例如:'uint16(0.6)* 2 = 2'和'class(ans)'将会是uint16。因此''isposint'函数正在测试以确保它的一个double类型的整数可能是因为一些算术将要完成,但它仍然需要一个整数。 – Justin 2013-04-11 22:39:39