2017-12-01 21 views
0

私は、ORやANDのような論理関数を分類できる単純なパーセプトロンをPythonで実装しようとしています。パーセプトロンは正しくトレーニングしていません - エラーはループですか?

Example AND-gate

Iは、Pythonで、次のコードを持っている:

バイアスは、各入力ベクトルにおける3番目のエントリです。 '正しい'値を含む行ベクトル 'targets'があり、ラベルは

です。問題は、重みが正しく更新されないことです。彼らは無作為であり、実際に何も訓練されていないことを私に伝えています。

inputs = np.array([ 
[0,0,1], 
[0,1,1], 
[1,0,1], 
[1,1,1], 
]) 
targets = np.array([0,0,0,1]) 

def step_function(x): 
    return 1 * (x>=0) 

def train(x,y): 
    rate = 0.1 
    trials = 10 
    errors = [] 
    w = np.random.rand(len(inputs[0])) 

    for t in range(trials): 
     for i, x in enumerate(inputs): 

      actual = np.dot(inputs[i], w) 
      desired = targets[i] 
      error = desired - step_function(actual) 

      if error != 0: 
       errors.append(error) 
       w += rate * error * inputs[i] 

    return w 

w = train(inputs, targets) 
print(w) 

答えて

0

機能step_functionが正しくありません。あなたがその機能をスキップして、ちょうど変更することができます。

#this 
error = desired - step_function(actual) 
#to 
error = desired - actual 

結果は完璧な1と0になるだろうされていませんが、私はあなたが目指していると思うの作業を行います。将来は、シグモイド関数などを使用して、0と1に近い結果を得ることができます。

関連する問題