- インスタンスを作る時にバイアス,重みを与える
- 実行時にx1,x2を与える
を実現するために作った。 多分読み進めたらちゃんとしたパーセプトロンのクラスは作られるような気もするが、 Python書く練習として作ってみました。
- 例外処理
- 可視性・可変性
- その他ドキュメント
などは考えて作っていませんが、余裕ができれば追加しようと思います。
テストとしては本中のパーセプトロンの例,AND OR NANDの例を入れてみました。 なお多層パーセプトロンとしてxorを作ってみました。*1
多層パーセプトロンはクラス化できるのか、あまり想像できません
import unittest import Perceptron as fortest class TestPerceptron(unittest.TestCase): def test_init(self): perceptron = fortest.Perceptron(0.5,0.5,-0.7) self.assertEqual(perceptron.w1,0.5) self.assertEqual(perceptron.w2,0.5) self.assertEqual(perceptron.b,-0.7) def test_and(self): AND = fortest.Perceptron(0.5,0.5,-0.7) self.assertEqual(1,AND.do(1,1)) self.assertEqual(0,AND.do(0,1)) self.assertEqual(0,AND.do(1,0)) self.assertEqual(0,AND.do(0,0)) def test_nand(self): NAND = fortest.Perceptron(w1=-0.5,w2=-0.5,b=0.7) self.assertEqual(1,NAND.do(0,1)) self.assertEqual(1,NAND.do(1,0)) self.assertEqual(1,NAND.do(0,0)) self.assertEqual(0,NAND.do(1,1)) def test_or(self): OR = fortest.Perceptron(w1=0.5,w2=0.5,b = -0.2) self.assertEqual(1,OR.do(0,1)) self.assertEqual(1,OR.do(1,0)) self.assertEqual(0,OR.do(0,0)) self.assertEqual(1,OR.do(1,1)) def test_xor(self): NAND = fortest.Perceptron(w1=-0.5,w2=-0.5,b=0.7) OR = fortest.Perceptron(w1=0.5,w2=0.5,b = -0.2) AND = fortest.Perceptron(0.5,0.5,-0.7) #Perceptron can not solve the nonlinear problem, but it is possible with multilayer perceptron. #Since the XOR gate is a nonlinear problem, it is implemented with a multilayer perceptron. def XOR(x1,x2): return AND.do(NAND.do(x1,x2),OR.do(x1,x2)) self.assertEqual(0,XOR(0,0)) self.assertEqual(1,XOR(1,0)) self.assertEqual(1,XOR(0,1)) self.assertEqual(0,XOR(1,1)) if __name__ == '__main__': unittest.main()
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
*1:実装自体はテストの外にするようなもんだと思うけど。。。