麻烦指正一下错误。错误使用 network/train (第 340 行) Inputs and targets have different numbers of samples. 出错 bp (第 219 行) [net,tr]=train(net,P,T);
代码如下:
```c++
P=[P_0,P_1,P_2,P_3,P_4,P_5,P_6,P_7,P_8,P_9,P_10,P_11,P_12,P_13,P_14,P_15,P_16,P_17,P_18,P_19,P_20,P_21,P_22,P_23,P_24,P_25,P_26,P_27,P_28,P_29,P_30,P_31,P_32,P_33,P_34,P_35,P_36,P_37,P_38,P_39,P_40,P_41,P_42,P_43,P_44,P_45,P_46,P_47,P_48,P_49,P_50,P_51,P_52,P_53,P_54,P_55,P_56,P_57,P_58,P_59,P_60,P_61,P_62,P_63,P_64];
%% 输出样本
T=eye(44,44);
%% bp神经网络参数设置
net=newff(minmax(P),[800,239,44],{'logsig','logsig','logsig'},'traingdx');%[800,239,44]建立一个三层BP神经网络
net.inputWeights{1,1}.initFcn ='randnr';%当前输入层权值和阈值
net.layerWeights{2,1}.initFcn ='randnr';%当前网络层权值和阈值
net.trainparam.epochs=5000;%最大训练次数5000
net.trainparam.show=50;%每隔50次查看训练结果
net.trainparam.lr=0.05;%学习速率0.0005
net.trainparam.goal=1e-5;%网络收敛目标即最小误差0.0000000001
net=init(net);%训练网络
%% 训练样本
[net,tr]=train(net,P,T);
save('bpppnet','net');
看下P里面是否44个数据,P是1x44,你的T是44x44,P转置下变成44x1试下
不知道你这个问题是否已经解决, 如果还没有解决的话:你好,根据你提供的错误提示,我猜测是你的输入数据和目标数据的样本数量不一致导致的。建议你按照以下步骤逐一排查:
P
和目标数据 T
的样本数量是否一致。可以通过以下代码进行检查:size(P, 2) % 查看输入数据集 P 的样本数量
size(T, 2) % 查看目标数据集 T 的样本数量
如果两个输出的结果不一样,那么就是因为数据集不一致导致的错误,你需要找到原因并解决。
train
函数调用之前,用于输出输入数据 P
和目标数据 T
的前几行,以确保数据格式没问题。disp(P(1:5,:)); % 输出输入数据的前5行
disp(T(1:5,:)); % 输出目标数据的前5行
如果你发现输入数据和目标数据的前几行不一致,那么就是因为数据格式不正确导致的,你需要找到原因并解决。
trainscg
或 trainlm
等替代 train
函数进行训练,这可能会解决问题。代码示例:
net = feedforwardnet([10 5]); % 创建一个神经网络
net.trainFcn = 'trainscg'; % 将训练函数改为 trainscg
[net,tr] = train(net,P,T); % 使用新的训练函数进行训练
希望以上建议对你有所帮助,如果仍然无法解决问题,建议你提供更详细的代码和数据,以便更好地定位问题。