clear
clc
close;
load pfile_gbest;
input_num = 3;
output_num = 1;
hidden_num = 11;
% load('pfile_i2.mat')
% % load('pfile_a2.mat')
% load('pfile_o2.mat')
% % inputs_1 = angle_2';
% inputs_1 = inputs_2';
% outputs_1 = outputs_2';
%
% train_x = inputs_1(:,1:490);
% % train_y = outputs_1(4:5,1:490);
% train_y = outputs_1(1:3,1:490);
%
% test_x = inputs_1(:,491:500);
% test_y = outputs_1(1:3,491:500);
% % test_y = outputs_1(4:5,491:500);
train_x =xlsread('仿真数据.xlsx','sheet1','A1:C3919');
test_x =xlsread('仿真数据.xlsx','sheet1','A3920:C3969');
train_y=xlsread('仿真数据.xlsx','sheet1','D1:D3919');
test_y=xlsread('仿真数据.xlsx','sheet1','D3920:D3969');
train_x=train_x';
test_x=test_x';
train_y=train_y';
test_y=test_y';
[inputn,inputps] = mapminmax(train_x);
[outputn,outputps] = mapminmax(train_y);
%建立BP网络
net = newff(inputn,outputn,11);
net.trainParam.epochs = 1000;
net.trainParam.lr = 0.05;
net.trainParam.goal = 0.000001;
w1 = gbest(1:input_num * hidden_num);
B1 = gbest(input_num * hidden_num + 1:input_num * hidden_num + hidden_num);
w2 = gbest(input_num * hidden_num + hidden_num + 1:input_num * hidden_num...
+ hidden_num + hidden_num * output_num);
B2 = gbest(input_num * hidden_num+ hidden_num + hidden_num * output_num + 1:...
input_num * hidden_num + hidden_num + hidden_num * output_num + output_num);
net.iw{1,1} = reshape(w1,hidden_num,input_num);
net.lw{2,1} = reshape(w2,output_num,hidden_num);
net.b{1} = reshape(B1,hidden_num,1);
net.b{2} = B2';
% [net,per2] = train(net,inputn,outputn);
net= train(net,inputn,outputn);
inputn_test = mapminmax('apply',test_x,inputps);
ty = sim(net,inputn_test);
net_J = mapminmax('reverse',ty,outputps);
error = abs(test_y - net_J);
figure
plot(test_y,'bo-','linewidth',1.2)
hold on
plot(net_J,'r*-','linewidth',1.2)
legend('期望值','预测值')
xlabel('测试样本编号'),ylabel('指标值')
title('BP测试集预测值和期望值的对比')
set(gca,'fontsize',12)
figure
plot(error,'ro-','linewidth',1.2)
xlabel('测试样本编号'),ylabel('预测偏差')
title('BP神经网络测试集的预测误差')
set(gca,'fontsize',12)
上面是一个神经网络训练代码,gbest是不变的唯一的,我想把他输入到权值阈值初始值上面去,想使得每次的训练结果都一样,但是实际训练出来的每次结果都会有变化,请问有人知道什么原因吗
你好,这是因为每次的训练初始权值以及batch都是随机的。你如果想要每次训练结果一样,就需要在
clear
clc
close;
之后一行,加入
rng(1) %1是随机种子,随机种子固定,则每次的训练的结果永远固定
如有帮助,还望采纳哟