Kerasで論理積を学習する

Kerasの最初の最初の第一歩ということで、超簡単に論理積を学習させて、使い方などを勉強してみました。
まだまだへっぽこな解説なので、間違っているとこなどあればご指摘願います。


詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~
詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

 

and.py

 

出力

基本的にコメントを見てもらうと大体わかると思いますが、出力に関して少し補足します。
以下の「○行目の〜」という記述は、特に断りがない限り入力(and.py)の方の行数を指します。

classes

まずclassesですが、これは学習した後に、40行目のようなデータXを突っ込んだ時にkeras君が答えてくれるものです。
回答例は41行目のとおりですが、見事に正解しています。100点満点!

classified

63行目にあるとおり、classesとY(回答)が合っている時にTrue、間違っているときはFalseを返します。
上述したとおり100点満点なので全部Trueが返っています。

probability

今回はハイパボリックタンジェント関数で2値分類しています。
ですので、ここにある数字は、学習後のkeras君に
[0,0]を教えて、とか、
[0,1]を教えて、などと言った時に「『1』と返す確率」を示します。(多分)
負数になっているのは謎。(勉強不足)

before

わかりにくくて申し訳ないのですが、beforeには「学習する前のkeras君に[0,1]は何でしょう?と訊いた時に答えてくれる数字」です。
正解は[0]であるにも関わらず、勉強前なので[1]と答えています。
0.88716..というのは同じ状況で「『1』と答える確率です。

after

200エポック回して学習した後のkeras君の答えです。勿論あっています。

loss

最終段階でのlossの値を出力したいなと思ってやってみたのですが、10^(-7)乗となっていますね。
合っているんでしょうか。わかりません。(すいません)

ちなみにターミナルのログの最終行はこんな感じです。
lossは0.0101になっています。多分こっちが合っているんでしょう。

plot

lossの遷移をプロットしています。最初の10回位で一気に下がっていますね。
ちなみに最終プロットにカーソルを持っていくと「0.0101」と表示されます。

ちなみに

上ではtanh関数を使っていますがsigmoid関数を使ってみると結果は以下のようになりました。


今回はtanh関数の方が優秀だったみたいですね。

 

追記(2017/6/10)

上記のLossHistoryを使わなくとも最終的のlossの値を出力できる方法がありましたので、修正しました。

【参考】Kerasの便利な使い方
DeepLearning系ライブラリ、Kerasがあまりにも便利だったので使い方メモ – プロクラシスト

 

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~
詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

コメントを残す