ゼロから作るディープラーニング 3日目 2章 パーセプトロン AND NAND OR XOR

初心者が詰まったポイントと対策とか

 

AND, NAND, ORは入力*重みの単純な和(=単純パーセプトロン)で可能だが、XORは不可

XORはNANDとORをANDしたら(=多層パーセプトロン)実現可能

 

AND, NAND, OR, XORの簡単なコード

def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1

print('AND')
print(AND(0,0)) # 0 を出力
print(AND(1,0)) # 0 を出力
print(AND(0,1)) # 0 を出力
print(AND(1,1)) # 1 を出力

def NAND(x1, x2):
w1, w2, theta = -0.5, -0.5, -0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1

print('NAND')
print(NAND(0,0)) # 1 を出力
print(NAND(1,0)) # 1 を出力
print(NAND(0,1)) # 1 を出力
print(NAND(1,1)) # 0 を出力

def OR(x1, x2):
w1, w2, theta = 1, 1, 0
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1

print('OR')
print(OR(0,0)) # 0 を出力
print(OR(1,0)) # 1 を出力
print(OR(0,1)) # 1 を出力
print(OR(1,1)) # 1 を出力


def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y

print('XOR')
print(XOR(0,0)) # 0 を出力
print(XOR(1,0)) # 1 を出力
print(XOR(0,1)) # 1 を出力
print(XOR(1,1)) # 0 を出力

 章の最後に「シンプルな仕組みなのですぐに理解できたでしょう」と書いてあったけど、全然そんなことなかったです・・・