错误使用 network/train (line 340) Output data size does not match net.outputs{2}.size.

今天在学习使用神经网络的时候遇到这样一个问题:

错误使用 network/train (line 340)
Output data size does not match net.outputs{2}.size.

具体图片:

出现问题的原因
分析了一波发现原因很简单,就是因为输出层神经元个数和newff函数里设置的不一样,结果就错了。
我用的是这样的代码:

clear
clc
P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;
9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;
3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;
2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;
140 120 140 150 80 130 130 100 130 140 115 80 90 130;
2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;
11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;
50 70 50 80 50 60 65 40 65 50 50 50 70 70];
T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];
[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);
%创建网络
net=newff(minmax(P),[8,2],{'tansig','purelin'},'trainlm');
%设置训练次数
net.trainParam.epochs = 5000;
%设置收敛误差
net.trainParam.goal=0.0000001;
%训练网络
[net,tr]=train(net,p1,t1);
%输入数据
a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50];
%将输入数据归一化
a=premnmx(a);
%放入到网络输出数据
b=sim(net,a);
%将得到的数据反归一化得到预测数据
c=postmnmx(b,mint,maxt);

可以看到训练集是1*14的矩阵,等于说是有一个神经元输出14个样本测试集
但是在newff函数里输出层设置了2个神经元

所以会报错

解决方法:
修改newff函数里输出层的神经元个数即可

我这里把2改成1
神经网络运算结果
这里也能发现一个问题,初学的时候总是搞不清,nftool这个为啥总是显示layer1、layer2,搞不清到底有没有输出层。
net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
这里面的S其实是[隐藏层个数,输出层个数]。比如[8,6,2,1]意思是设置隐藏层为3个,第一个有8个神经元,第二层有6个神经元,第三层有2个神经元,输出层有1个神经元。
再简单一点说,nftool显示的layer,最后一个是输出层,其他都是隐藏层。

初学神经网络,如有错误还请指出

发布了13 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43637490/article/details/100654203