勉強しないとな~blog

ちゃんと勉強せねば…な電気設計エンジニアです。

ゼロから作るDeep Learningやる - 2章 パーセプトロン

「ゼロから作るDeep Learning」をやって、きちんとDeep Learningの基礎を理解したかったので、購入した。

www.oreilly.co.jp

GitHub - oreilly-japan/deep-learning-from-scratch: 『ゼロから作る Deep Learning』(O'Reilly Japan, 2016)

読んでコードも書きながら、ブログにも記録していく。

2章 パーセプトロン

1章はPython自体とかnumpyとかの説明なので省く。

2章から進める。

内容は、パーセプトロンの説明と、それを使った論理ゲートの実装。

パーセプトロンをクラスで実装して、重みをコンストラクタの引数にすると良いような気がしたので、そんな感じでやってみた。

import numpy as np

クラスでパーセプトロンを実装

class perceptron:
    def __init__(self, w1:float, w2:float, b:float) -> None:
        self.w = np.array([w1, w2])
        self.b = b
    
    def __call__(self, x1:float, x2:float) -> float:
        x = np.array([x1, x2])
        return 1.0 if (self.b + np.sum(self.w * x) > 0.0) else 0.0

ANDゲートの実装

重みは適当。

p_and = perceptron(0.5, 0.5, -0.7)

print(p_and(0, 0))
print(p_and(0, 1))
print(p_and(1, 0))
print(p_and(1, 1))
0.0
0.0
0.0
1.0

NANDゲートの実装

重みを変える。

p_nand = perceptron(-0.5, -0.5, 0.7)
print(p_nand(0,0))
print(p_nand(0,1))
print(p_nand(1,0))
print(p_nand(1,1))
1.0
1.0
1.0
0.0

ORゲートの実装

これも重みを変えるだけ。

p_or = perceptron(0.5, 0.5, -0.2)
print(p_or(0,0))
print(p_or(0,1))
print(p_or(1,0))
print(p_or(1,1))
0.0
1.0
1.0
1.0

XORゲートの実装

3種類のゲートを組み合わせる。

def p_xor(x1, x2):
    return p_and(p_or(x1, x2), p_nand(x1, x2))

print(p_xor(0,0))
print(p_xor(0,1))
print(p_xor(1,0))
print(p_xor(1,1))
0.0
1.0
1.0
0.0

以上

ここからどんどん進めて、理解していきたい。