パーセプトロンでORを作る

前回のパーセプトロンでANDを作るに引き続いてOR回路を作ってみましょう。
入力のいずれかが「あり」の場合にのみ「1」を返すことになります。

# coding: utf-8
import numpy as np

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

print("(0, 0) -> " + str(OR(0, 0)))
print("(0, 1) -> " + str(OR(0, 1)))
print("(1, 0) -> " + str(OR(1, 0)))
print("(1, 1) -> " + str(OR(1, 1)))

 

実行結果は

(0, 0) -> 0
(0, 1) -> 1
(1, 0) -> 1
(1, 1) -> 1

となります。

ちょっと気が付きませんか?ANDの時とほとんど同じプログラムです。
どこが違うのでしょうか?間違え探しするのも大変なくらいです。

実は b = -0.5 が b = -0.2 に変わっているだけの違いです。

重みの違いで回路の振る舞いが全く変わるのは興味深いですね。

システム開発

Posted by @erestage