【ディープラーニング】【keras】排他論理和をkerasで作ったmodelに解かせてみた

kerasの入門として、
排他論理和をkerasで作ったmodelに解かせてみました。

排他論理和

ちなみに排他論理和の復習を簡単にしておきます。

x1x2y
000
101
011
110

両方が真、または両方が偽であれば、0。それぞれ異なる場合には1となるようなものが排他論理和になります。
グラフにプロットすると以下のようになります。

赤が1、青が0になります。これらは直線ではうまく分類できないことがわかります。これを線形分離不可能と言います。

今回はこの排他論理和を分類できるモデル(ニューラルネットワーク)をKerasを使って実装してみます。

実装

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
import numpy as np

model = Sequential()
model.add(Dense(3, input_dim=2))
model.add(Activation("relu"))
model.add(Dense(5))
model.add(Activation("relu"))
model.add(Dense(1))
model.add(Activation("linear"))

model.compile(loss="mse",
              optimizer="sgd")

x = np.array([[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0]])
y = np.array([0, 1, 1, 0])

model.fit(x, y, epochs=3000)

print("---------------------------------------------")
print("邨先棡")
print("---------------------------------------------")
x_test = np.array([[0.0, 0.0]])
print("0,0 : "+str(model.predict(x_test)))
x_test = np.array([[0.0, 1.0]])
print("0,1 : "+str(model.predict(x_test)))
x_test = np.array([[1.0, 0.0]])
print("1,0 : "+str(model.predict(x_test)))
x_test = np.array([[1.0, 1.0]])
print("1,1 : "+str(model.predict(x_test)))

結果

省略

4/4 [==============================] - 0s - loss: 0.0141 - acc: 1.0000
Epoch 9997/10000
4/4 [==============================] - 0s - loss: 0.0141 - acc: 1.0000
Epoch 9998/10000
4/4 [==============================] - 0s - loss: 0.0141 - acc: 1.0000
Epoch 9999/10000
4/4 [==============================] - 0s - loss: 0.0141 - acc: 1.0000
Epoch 10000/10000
4/4 [==============================] - 0s - loss: 0.0141 - acc: 1.0000
---------------------------------------------
---------------------------------------------
0,0 : [[0.00077531]]
0,1 : [[0.99977]]
1,0 : [[0.9997702]]
1,1 : [[0.0001112]]

ちゃんと学習できてるみたいですね!

誤差伝搬の理論的なところは以下の記事で、

コメント

タイトルとURLをコピーしました