Homeニューラルネット › (34) ニューラルネットでsin関数を近似(その2)
Sponsored Link

(34) ニューラルネットでsin関数を近似(その2)

(33) ニューラルネットでsin関数を近似 では、3層(1-3-1)のニューラルネットワークにsin関数を学習させてみた。

今回は下表の3種類のネットワーク構成で比較してみた。

1 3層 [I 1] – [H 3] – [O 1]
2 3層 [I 1] – [H 5] – [O 1]
3 4層 [I 1] – [H 5] – [H 3] – [O 1] 水色

nnet_sin_2
隠れ層のユニット数が多い方が、学習開始直後の学習進捗が速いようだ。
問題が簡単なためか、50エポック辺りからは差がわからない。

pkg load nnet
rand('state', 0)
randn('state', 0)

% 学習データを作成
data_IN  = [ -pi*2 : 0.1 : pi*2 ];
data_OUT = sin(data_IN);
Rx2      = [min(data_IN), max(data_IN)];

% 3層ニューラルネットワーク(#1)を作成
S01 = [3 1];
NNet01 = newff( Rx2, S01 );
NNet01.trainParam.epochs = 60;

% 3層ニューラルネットワーク(#2)を作成
S02 = [5 1];
NNet02 = newff( Rx2, S02 );
NNet02.trainParam.epochs = 60;

% 4層ニューラルネットワークを作成
S03 = [5 3 1];
NNet03 = newff( Rx2, S03 );
NNet03.trainParam.epochs = 60;

% 学習を実行
VV.P = data_IN;
VV.T = data_OUT;

% net1
NNet01 = train( NNet01, data_IN, data_OUT, [], [], VV );
res01  = sim( NNet01, data_IN );

% net2
NNet02 = train( NNet02, data_IN, data_OUT, [], [], VV );
res02  = sim( NNet02, data_IN );

% net3
NNet03 = train( NNet03, data_IN, data_OUT, [], [], VV );
res03  = sim( NNet03, data_IN );

plot(data_IN, res01,    'b','LineWidth',2',    ...
     data_IN, res02,    'g','LineWidth',2',    ...
     data_IN, res03,    'c','LineWidth',2,
     data_IN, data_OUT, 'r','LineWidth',2' );

不明点
仕様上は train 戻り値は 4個あるはず。3番目のout はおそらく出力値のこと。
もしこれが取得できれば、上記プログラムの sim は不要になるはずだ。
しかし、現状の trainは戻り値を 1個しか返さない… なぜだ?

[net,tr,out,E] = train(MLPnet,mInputN,mOutput,[],[],VV);

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*