プログラミング初心者の為用語などが分かりづらかったら申し訳ありません。指摘をいただいたらすぐに直します。
###前提・実現したいこと
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))
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/04 09:43