【Python/TensorFlow】AND・OR・NOR・NANDを学習

Pythonの深層学習モジュール「TensorFlow」を用いて、「AND」「OR」「NOR」「NAND」演算を学習する方法についてソースコード付きでまとめました。

TensorFlowでバージョン確認

Pythonの深層学習モジュール「TensorFlow」で、「AND」「OR」「NOR」「NAND」演算を学習します。

サンプルコード(Python + TensorFlow)

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

# -*- coding:utf-8 -*-
import tensorflow as tf
import numpy as np

# 繰り返し学習回数(1000回)
epochs = 1000

# 訓練データの用意
# 入力データ
x_train = [[0, 0], [0, 1], [1, 0], [1, 1]]
y_train = [0, 0, 0, 1]
y_train = tf.keras.utils.to_categorical(y_train, 2) # テストデータ(正解ラベル)をクラスベクトルに変換

# モデルの作成
x = tf.placeholder("float", [None, 2]) # 入力信号
W = tf.Variable(tf.zeros([2, 2]))      # 重みW
b = tf.Variable(tf.zeros([2]))         # バイアスb
y = tf.nn.softmax(tf.matmul(x, W) + b) # 出力信号y(=活性化関数:ソフトマックス関数)

# 教師信号(正解のラベルデータ)
y_ = tf.placeholder("float", [None, 2])

# 誤差関数
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

# 勾配降下法で最適化(クロスエントロピーの最小化)
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

# tensorflow.Sessionの起動
sess = tf.Session()

# 変数の初期化
init = tf.initialize_all_variables()
sess.run(init)

# 繰り返し学習
for step in range(epochs ):
    # x,yに値を渡して学習
    sess.run(train_step, feed_dict={x: x_train, y_: y_train})


# 学習結果の検証
# テストデータの用意
x_test = x_train

for x_input in x_test:
    y_pred = sess.run(y, feed_dict = {x: [x_input]})
    # 出力をベクトルから整数値に変換
    y_pred = np.argmax(y_pred, axis=1)
    print(x_input, y_pred) 

■実行結果

[0, 0] [0]
[0, 1] [0]
[1, 0] [0]
[1, 1] [1]

参考

■OR演算を学習させたい場合

x_train = [[0, 0], [0, 1], [1, 0], [1, 1]]
y_train = [0, 1, 1, 1]

■NOR演算を学習させたい場合

x_train = [[0, 0], [0, 1], [1, 0], [1, 1]]
y_train = [1, 0, 0, 0]

■NAND演算を学習させたい場合

x_train = [[0, 0], [0, 1], [1, 0], [1, 1]]
y_train = [1, 1, 1, 0]
関連記事
1 【Python/TensorFlow入門】ディープラーニングの使い方
2 【機械学習入門】アルゴリズム&プログラミング
3 Python入門 基本文法
関連記事