初学者请多指教,想用书中的例子做128神经元116个样本的训练,但在训练环节出错提示矩阵出错,数据和代码在附件。
书中的代码,
还有这里的 j 和 i 是什么含义
for i=1:length(net1_out)+1
for j=1:1
ipu1(j)=err(j); % 局部梯度
% 输出层与隐含层之间的调整量
delta1(i,j) = ita.*ipu1(j).*net2_int(i);
end
end
%% 训练
for x=1:M % 迭代
ind=randi(60); % 从1-60中选一个随机数
in=[traind_s(ind,:),1]; % 输入层输出
net1_in=in*net.w1; % 隐含层输入
net1_out=logsig(net1_in); % 隐含层输出
net2_int = [net1_out,1]; % 下一次输入
net2_in = net2_int*net.w2; % 输出层输入
net2_out = logsig(net2_in); % 输出层输出
err=trainl(ind)-net2_out; % 误差
errt(x)=1/2*sqrt(sum(err.^2)); % 误差平方
fprintf('第 %d 次循环, 第%d个学生, 误差 %f\n',x,ind, errt(x));
% 调整权值
for i=1:length(net1_out)+1
for j=1:1
ipu1(j)=err(j); % 局部梯度
% 输出层与隐含层之间的调整量
delta1(i,j) = ita.*ipu1(j).*net2_int(i);
end
end
for m=1:3
for i=1:length(net1_out)
% 局部梯度
ipu2(i)=net1_out(i).*(1-net1_out(i)).*sum(ipu1.*net.w2);
% 输入层和隐含层之间的调整量
delta2(m,i)= ita.*in(m).*ipu2(i);
end
end
% 调整权值
if x==1
net.w1 = net.w1+delta2;
net.w2 = net.w2+delta1;
else
net.w1 = net.w1+delta2*(1-alpha) + alpha*old_delta2;
net.w2 = net.w2+delta1*(1-alpha) + alpha*old_delta1;
end
old_delta1=delta1;
old_delta2=delta2;
end
2018-4-17 19:03 上传
点击文件名下载附件
120.77 KB, 下载次数: 4
2018-4-17 19:03 上传
点击文件名下载附件
1.39 KB, 下载次数: 4
2018-4-17 19:03 上传
点击文件名下载附件
5.42 KB, 下载次数: 4
2018-4-17 19:03 上传
点击文件名下载附件
6.22 KB, 下载次数: 4