2,561 views
この記事は最終更新から 1834日 が経過しています。
(33) ニューラルネットでsin関数を近似 をちょっとだけ複雑な式に変えても近似できるか? を試してみる。
使うのは心電図の波形のようなこんな関数にする。
(1) 学習データを作成
data_IN = [-5 : 0.1 : 5]; data_OUT = sin(data_IN) + cos(power(data_IN,2)) + tan(data_IN);
(2) 4層ニューラルネットワークを作成
S = [16 32 1];
R = [min(data_IN), max(data_IN)]
NNet = newff( R, S );
NNet.trainParam.epochs = 3000;
(3) 学習を実行
VV.P = data_IN; VV.T = data_OUT; NNet = train( NNet, data_IN, data_OUT, [], [], VV ); data_RES = sim( NNet, data_IN ); plot( data_IN, data_RES, 'b','LineWidth',2', ... data_IN, data_OUT, 'r','LineWidth',2' );
(4) 未学習のデータで検証
test_IN = rand(1,100) * 10 - 5;
test_OUT = sim( NNet, test_IN );
plot(data_IN, data_OUT, 'r', 'LineWidth',2',...
test_IN, test_OUT, 'b+','LineWidth',2' );
3,000エポックではまだまだのようだが、なんとなく近似できているようだ。