bpニューラルネットワークを確立し、トレーニングしてシミュレーションします。ここで、入力はpで、出力はtです。

clear
%Data input
huanghe_p = [370 503 434 575 490 420 560 640 558 343 326 405 446 423 422 697 598 377 435 472 451 667 601 689 541 485 425 389 382 707 422];
huanghe_t = [515 713 586 753 720 567 717 987 810 489 453 589 639 568 595 982 849 519 615 652 599 941 893 999 758 701 630 561 520 1040 535];

%正規化
p =(huanghe_p-min(huanghe_p))/(max(huanghe_p)-min(huanghe_p));
t =(huanghe_t-min(huanghe_t))/(max(huanghe_t)-min(huanghe_t));

%データ入力2:ネットワーク関連パラメーター
EPOCHS = 10000;
GOAL = 0.000005;

%bpニューラルネットワークを確立し、トレーニングしてシミュレーションします。ここで、入力はpで、出力はtです。

%------------------------隠れ層ニューロンの確認---------------------- ---------

s = 3:15;%sは定数ベクトルであり、ニューロンの数を意味します
res = zeros(size(s));%resは、最初にゼロに設定されたエラーベクトルを格納します

pn = [p(1:5); p(6:10); p(11:15); p(16:20)];
tn = [t(1:5); t(6:10); t (11:15); t(16:20)];
for i = 1:length(s)           
    net = newff(minmax(pn)、[s(i)、4]、{'tansig'、 'purelin'} 、 'trainlm');
    net.iw {1,1} = zeros(size(net.iw {1,1}))+ 0.5;
    net.lw {2,1} = zeros(size(net.lw {2 、1}))+ 0.75;
    net.b {1,1} = zeros(size(net.b {1,1}))+ 0.5;
    net.b {2,1} = zeros(size(net.b {2,1}));
    net.trainParam.epochs = EPOCHS;
    net.trainParam.goal = GOAL;
    net = train(net、pn、tn);
    y = sim(net、pn);
e = tn-y;
error = mse(e、net);
res(i)= norm(error);
    
end
%最適なニューロン数を選択します。numberは、エラーを最小化する隠れニューロンの数です
number = find(res == min(res) );
if(length(number)> 1)no = number(1)
else no = number
end

クリアエラー、解像度
%隠れ層ニューロンの数を選択した後、ネットワークを構築し、シミュレーションをトレーニングします。
net = newff(minmax(pn)、[no、4]、{'tansig'、 'purelin'}、 'trainlm');
    net.iw {1,1} = zeros(size(net.iw {1,1 }))+ 0.5;
    net.lw {2,1} = zeros(size(net.lw {2,1}))+ 0.75;
    net.b {1,1} = zeros(size(net.b {1 、1}))+ 0.5;
    net.b {2,1} = zeros(size(net.b {2,1}));
    net.trainParam.epochs = EPOCHS;
    net.trainParam.goal = GOAL;
net = train(net、pn、tn);
y = sim(net、pn);
e = tn-y;
error = mse(e、net)%errorはネットワークのエラーベクトルです
r = norm(error);%rはネットワークです
savenet%の全体的なエラーは最良のネットワークを保存します

%予測
入力= [p(11:15); p(16:20); p(21:25); p(26:30)];
yuce = sim(net、input);

%結果は
非正規化されますy1 = [y(1、:) y(2、:) y(3、:) y(4、:)];
yuce1 = [yuce(1、:) yuce(2、:) yuce (3、:) yuce(4、:)];
t1 = y1 *(max(huanghe_t(1:20))-min(huanghe_t(1:20)))+ min(huanghe_t(1:20));
yuce2 = yuce1 *(max(huanghe_t(1:20))-min(huanghe_t(1:20)))+ min(huanghe_t(1:20));

%計算エラー
wucha = abs(t1-huanghe_t(1:20))./ huanghe_t(1:20)
b = minmax(wucha);
average_wucha = mean(wucha);
ploting
figure(1)
plot(1:20、 huanghe_t(1:20)、 '*-'、1:20、t1、 'o:')

figure(2)
plot(1:20、huanghe_t(11:30)、 '*-'、1:20、yuce2、 'o:')
 

おすすめ

転載: blog.csdn.net/ccsss22/article/details/114067917