「ゼロから作るDeep Learning」をやって、きちんとDeep Learningの基礎を理解したかったので、購入した。
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
以上
ここからどんどん進めて、理解していきたい。