FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


KerasにしたらTensorFlowと同じ結果にならない

TensorFlowで記述していたところをKerasに変えた。
同じような結果を期待してたんだけど、なぜか違うような結果になる。

倒立振子(強化学習、DQN)をやってるんだが、TensorFlowだとそこそこ学習が進んで振子がどんどん高い位置へ行くのに、Kerasだとうまくいかず、振子が初期地点からもじもじして対して動かなかったりしてた。

どういうわけかKerasだといくら学習させても損失関数の値が下がりきらない。
それほどのデータ数があるわけでもないし、NNの層の数や大きさが不足しているとは到底思えない。というかTensorFlowだといけてたし。
残る原因になりそうなのは、、、ドロップアウト?

Kerasでは出力層の手前にドロップアウトを
layerD = Dropout(0.5)
↑このように入れていた。0.5というのは0.5の割合だけないものにして過学習を防ぐってやつだよな。
#設定
keep_prob = tf.placeholder(tf.float32 , name='keep_prob')
fc_drop = tf.nn.dropout(hidden4, keep_prob )

#学習時
sess.run(train_step, feed_dict={x_ph: xData, y_ph: yData , keep_prob : 0.5})
↑TensorFlowでも同じように出力層の前に入れ、値を0.5で指定してた。

試しにKerasでこの0.5を0.1(数値に意味はなく単に0.5より小さい値)にしてみたらなぜかいい感じで学習が進んだ。

Kerasのバグかもしれないし、たまたまかもしれない。
なんせ、学習させるfit関数をwhileでぶん回して、、、とか変な実装してるからクリアされるべきところがされてない、とかそういう類のものかもしれない。

<< IFTTTでボールルームへようこそのツイート更新を通知で得る  TopPage  新iPhoneどうするかな〜? >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1201-b0970feb




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad