質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

433閲覧

XORニューロンを生成するクラスを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

1クリップ

投稿2018/01/03 09:40

プログラミング初心者の為用語などが分かりづらかったら申し訳ありません。指摘をいただいたらすぐに直します。
###前提・実現したいこと
pythonに慣れる、機械学習に触れてみる、ことを目標に勉強しています。
オライリーの「ゼロから作るDeep Learning」と言う本を参考にしながら進めていて、
現在はand, or, xorとして振る舞うニューロンを生成するクラスを実装しているところです。

###質問したい事
以下のコードのように設定しました。
一般的なニューロンのクラスをBaseとして定義し、重みやバイアスを設定することで、and, or, nand として振る舞うインスタンスをつくる事ができます。(挙動は確認済みです)
質問したい点は、xorのように振る舞うインスタンスをつくるようクラスを定義できないかということです。
現状、クラスの内部では重みやバイアスの和が線形式として定義されているので、このままではどんな初期値を入れてもインスタンスとしてはxorは作れないだろうとは思います。
そこで、どのようなクラスを定義すればand, or, xor, nand すべてをインスタンスとして生成できるかアイディアなどを伺いたいです。
###該当のソースコード

python

1"""ステップ関数の定義""" 2def step(x): 3 if x > 0: 4 return 1 5 else: 6 return 0 7 8""" 各ニューロンを生成するためのクラス。 9 重み : w1, w2 10 バイアス:bias 11 を設定し、 12 x*w1 + y*w2 + bias 13 を引数にとったステップ関数の値 14 step( x*w1 + y*w2 + bias ) 15 を発火によって返す """ 16class Base: 17 18 #パラメータのセット 19 def __init__(self, w1, w2, bias): 20 self.w1 = w1 21 self.w2 = w2 22 self.bias = bias 23 24 #後からパラメータを調整する為の関数 25 def change_a(self, x): 26 self.w1 = x 27 def change_b(self, x): 28 self.w2 = x 29 def change_theta(self, x): 30 self.bias = bias 31 32 # 発火機能 33 def fire(self, x, y): 34 return step(self.w1*x + self.w2*y + self.bias) 35 36 37"""とりあえずAND, NAND, OR インスタンスを生成 38 線形表現できる限界(NORもあるけど) 39 動作確認済み""" 40and01 = Base(1, 1, -1.9) 41nand01 = Base(-1, -1, 2) 42or01 = Base(1, 1, -0.5) 43 44"""XORを関数として定義 45 以下のようにすればうまく行くけど 46 出来ればand, or, nandと同じようにインスタンスにしたい""" 47def xor01(x,y): 48 return and01.fire(nand01.fire(x, y), or01.fire(x, y))

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

継承でインタフェースを合わせてみました。こんな感じでいかがですか?
あと、バイアス等の調整は、直接インスタンス変数に代入すればよいかと思い、メソッドをなくしました。

python

1class Base: 2 3 def __init__(self, w1, w2, bias): 4 self.name = "" 5 self.w1 = w1 6 self.w2 = w2 7 self.bias = bias 8 9 def step(self, x): 10 if x > 0: 11 return 1 12 else: 13 return 0 14 15 def fire(self, x, y): 16 return self.step(self.w1 * x + self.w2 * y + self.bias) 17 18 def testTable(self): 19 print('{0} Table'.format(self.name)) 20 print('X: 0, Y: 0, => {0}'.format(self.fire(0, 0))) 21 print('X: 0, Y: 1, => {0}'.format(self.fire(0, 1))) 22 print('X: 1, Y: 0, => {0}'.format(self.fire(1, 0))) 23 print('X: 1, Y: 1, => {0}'.format(self.fire(1, 1))) 24 25class AND(Base): 26 27 def __init__(self): 28 super().__init__(1, 1, -1.9) 29 self.name = "AND" 30 31class NAND(Base): 32 33 def __init__(self): 34 super().__init__(-1, -1, 2) 35 self.name = "NAND" 36 37class OR(Base): 38 39 def __init__(self): 40 super().__init__(1, 1, -0.5) 41 self.name = "OR" 42 43class XOR(Base): 44 45 def __init__(self): 46 self.name = "XOR" 47 self._and = AND() 48 self._nand = NAND() 49 self._or = OR() 50 51 def fire(self, x, y): 52 return self._and.fire(self._nand.fire(x, y), self._or.fire(x, y)) 53 54if __name__ == '__main__': 55 56 and_gate = AND() 57 and_gate.testTable() 58 59 nand_gate = NAND() 60 nand_gate.testTable() 61 62 or_gate = OR() 63 or_gate.testTable() 64 65 xor_gate = XOR() 66 xor_gate.testTable() 67

投稿2018/01/03 10:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/04 09:43

早速の回答ありがとうございます! クラスの継承を使って各ゲートのインターフェースをそろえているんですね。とても読みやすくて分かりやすいです。 自分自身質問したい事がかたまっていない中、丁寧にありがとうございました。勉強になります。 実は後で多層のニューラルネットワークをつくることを想定して、初期値(重み、バイアス)を与えることで各ニューロンをインスタンスとして生成したいと考えていたのですが、もしかしたら第0層と1層目意向を別のクラスにするといいのかなと思いました。 大分質問とずれますね。継承を使ってやって見たいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問