错误:net.IW{1,1} must be a 5-by-31 matrix.
前情提要:在利用MATLAB做BP神经网络时,因为每次都是随机生成权值和阈值,导致每次的运行结果都不一样。所以萌发了自己固定权值和阈值的想法。但是在实际的运行过程中老是报这个错误。所以题主现在对整个过程做一个整理。
建立的神经网络结构为3层,输入层36个神经元,隐层5个神经元、输出层1个神经元
那么net.iw是什么意思呢?
net.iw的意思是神经网络的权重矩阵。注意,net.iw是一个细胞矩阵
那什么又是细胞矩阵呢?
细胞矩阵的意思就是矩阵中的每一个元素都是单独的一个矩阵,简而言之,细胞矩阵就是装矩阵的矩阵。
那继续说net.iw,net.iw是细胞矩阵,那其中有多少个矩阵呢?这是由你的网络层数和网络输入个数决定的。它的大小为NI*Ni,Nl是网络层数(net.numLayers),Ni是网络输入个数(net.numInputs)。
*net.iw{1,1}的大小应该是5 X 36。
但是matlab报错net.IW{1,1} must be a 5-by-31 matrix. 我反复看了几遍代码矩阵的转换这些,不知道哪里出了问题。最后和另外一段程序(采用相同数据集)中的net.iw{1,1}的大小做对比,发现也是5-by-31,恍然大明白了。
我开始怀疑是 我用的数据集的锅,于是经过观察发现,我用的数据集中的数据重复度很高,并不是说有的样本数据完全相同,就是有很多相同项。抱着找着这个问题根源的态度,我将保存了副本的数据集开始修改同类项,果然就没报错了。
总结一下,明白是为什么错误,实际上并没有解决意义。归根结底为什么会报这样的错,估计要去看一下源码了,这个就交给大佬去完成吧。
萌新,欢迎指正。