【Python/Keras】ニューラルネットでAND・OR演算の学習

Pythonの機械学習モジュール「Keras」でニューラルネットワークを実装し、AND・OR演算を学習する方法をソースコード付きでまとめました。

ニューラルネットでAND・OR演算の学習

今回は、Python3 + Kerasでニューラルネットワークを実装し、XOR演算の学習を行ってみました。

■XOR演算の訓練データ

入力 教師データ(AND) 教師データ(OR)
0, 0 0 0
1, 0 0 1
0, 1 0 1
1, 1 1 1

サンプルコード

サンプルプログラムのソースコードです。
■AND演算の場合

# -*- coding: utf-8 -*-
import numpy as np
from keras.models import Sequential, model_from_json
from keras.layers.core import Dense
from keras.optimizers import RMSprop

def main():
    # 訓練データの用意
    # 入力データ
    x_train = np.array([[0.0, 0.0],
                        [1.0, 0.0],
                        [0.0, 1.0],
                        [1.0, 1.0]])
    # 入力の教師データ
    y_train = np.array([0.0, 0.0, 0.0, 1.0])

    # モデル構築
    model = Sequential()
    # 入力層
    model.add(Dense(2, activation='sigmoid', input_shape=(2,)))
    # 出力層
    model.add(Dense(1, activation='linear'))
    # コンパイル(勾配法:RMSprop、損失関数:mean_squared_error、評価関数:accuracy)
    model.compile(loss='mean_squared_error', optimizer=RMSprop(), metrics=['accuracy'])
    # 構築したモデルで学習
    history = model.fit(x_train, y_train, batch_size=4, epochs=3000)

    # テストデータの用意
    x_test = x_train
    y_test = y_train
       
    # モデルの性能評価
    score = model.evaluate(x_train, y_train, verbose=0)
    print('Score:', score[0])    # Score: 0.0205617900938
    print('Accuracy:', score[1]) # Accuracy: 1.0

    # 学習済みモデルを使って答えを予測
    x = np.array([[0, 1]])
    y = model.predict(x)
    print(y) # [[ 0.1365453]]

if __name__ == '__main__':
    main()

■OR演算の場合は、教師データの部分を次のようにします。

    # 入力の教師データ
    y_train = np.array([0.0, 1.0, 1.0, 1.0])
関連記事
1 Python入門 基本文法
2 【Python/Keras】ディープラーニング入門・使い方
関連記事