(35) ニューラルネットでちょっと複雑な関数を近似

投稿者: | 2014/09/20

(33) ニューラルネットでsin関数を近似 をちょっとだけ複雑な式に変えても近似できるか? を試してみる。

使うのは心電図の波形のようなこんな関数にする。
20140920_04

nnet_sin_4

(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エポックではまだまだのようだが、なんとなく近似できているようだ。
20140920_05


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です