Pythonを使って,ANDゲートと同様に,単純な論理ゲートであるORゲートを考える.
def OR_gate(input1, input2):
if input1 == 1 or input2 == 1:
return 1
else:
return 0
# テスト
print("0 OR 0 =", OR_gate(0, 0)) # 0
print("0 OR 1 =", OR_gate(0, 1)) # 1
print("1 OR 0 =", OR_gate(1, 0)) # 1
print("1 OR 1 =", OR_gate(1, 1)) # 1
実行すると,
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
次に,同じくORゲートをパーセプトロンとして考えてみる.
import numpy as np
class Perceptron:
def __init__(self, input_size, lr=0.1, epochs=100):
self.W = np.zeros(input_size + 1)
self.epochs = epochs
self.lr = lr
def activation_fn(self, x):
return 1 if x >= 0 else 0
def predict(self, x):
x = np.insert(x, 0, 1) # バイアス項の追加
z = self.W.T.dot(x)
a = self.activation_fn(z)
return a
def train(self, X, d):
for _ in range(self.epochs):
for i in range(d.shape[0]):
y = self.predict(X[i])
e = d[i] - y
self.W = self.W + self.lr * e * np.insert(X[i], 0, 1)
# 入力データ
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
# 目標値
d = np.array([0, 1, 1, 1])
# パーセプトロンの定義と訓練
perceptron = Perceptron(input_size=2)
perceptron.train(X, d)
# テスト
print("0 OR 0 =", perceptron.predict(np.array([0, 0])))
print("0 OR 1 =", perceptron.predict(np.array([0, 1])))
print("1 OR 0 =", perceptron.predict(np.array([1, 0])))
print("1 OR 1 =", perceptron.predict(np.array([1, 1])))
出力は次のようになる.
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
Mathematics is the language with which God has written the universe.