2016-05-14 13 views
2

の点の位置を推測するために、私は彼が与えられた点(xか否かを推測しなければならない3つの入力(X、Y、バイアス= 1)ニューラルネットワーク:パーセプトロン関数に

と単純パーセプトロンを構築してい、y)は、またはの下にあり、の所定の関数です。

基本的に、それはthis article

に触発されたの学習の教師モデルは、ネットワークを訓練するために使用され、式は次のようである:それは可能訓練試験後、まだ

learningConst = 0.01 
error = desired - neuralAnswer 
new_weights[i] = old_weights[i] + error * inputs[i] * learningConst 

単純な関数(2x + 1)であっても間違い。

コードは

import numpy as np 
import matplotlib.pyplot as plt 

class Perceptron: 
    def __init__(self, n): 
     self.n = n #n is 2 in this case. 2 inputs [ x, y ] 
     self.weights = [np.random.uniform(-1, 1) for x in range(n)] 
     self.learningConstant = 0.05 

    # 1 added to the sum is the bias input  
    def feedForward(self, inputs): 
     return 1 + sum([self.weights[i]*inputs[i] for i in range(self.n)]) 

    def activate(self, result): 
     if result >= 0: 
      return 1 
     elif result < 0: 
      return -1 

    def train(self, inputs, expected): 
     prediction = self.feedForward(inputs) 
     answer = self.activate(prediction) 
     error = expected - answer 

     self.weights = [ 
      self.weights[i] + error * inputs[i] * self.learningConstant 
      for i in range(self.n) 
     ] 
     #print(self.weights) 

    def predict(self, inputs): 
     prediction = self.feedForward(inputs) 
     return self.activate(prediction) 

ここに結果が表示されます。緑の色は、パーセプトロンがそれを正しく推測し、赤の色がミスを示すことを示します。 面白いこと - それはラインの下の点で間違っている傾向があります。

プログラムを改善するにはどうすればよいですか?

Perceptron results

完全なコードCLICK

SOLUTION

せることなく、ブルート定数(完全なコードの行14)としてバイアス入力を使用していた私の問題それを学ぶアルゴリズム。 これで、私の入力は[バイアス、x、y]になり、ウェイトは[w1、w3、w3]になりました。

もう一つの良いアイデアは、アルゴリズムを使用して、プログラムをテストするたびに、最初からやり直す必要がないので、どこか別の重みを保存することです。

2X + 1 Image

のx^2 - 2X + 1 enter image description here

+1

私...のみ乱数を生成する 'numpy'を使用する点を参照numpyの配列とベクトル演算を使用しない:' self.weigths = np.random.uniform(-1、1、サイズ= N) 'と' np.sum(self.weigths * inputs) 'と' self.weights = self.weights + error * inputs * self.learningConstant'の2つです。 – Bakuriu

+1

'Perceptron'も使うコードを投稿してください。私はそれを作る必要はありません:) – bakkal

答えて

1

あなたのソリューションの主な問題は、あなたのバイアスがそれはパラメータはありません常に1であるということです - それは定数です。あなたのモデルは古典的なパーセプトロンモデルよりもかなり弱いので、これは問題になるかもしれません。

+0

それは良い考えです!バイアス入力によって答えが変わる可能性があります。しかし、ニューラルネットワークはいくつかのテストの後にバイアス入力にウェイトを適応させませんか? –

+1

はい、それはすべきですが、あなたの偏見にどのように適応するかにかかわらず、常に正になります。これはあなたの予測に深刻な影響を与える可能性があります。 –

+0

どのように変更する必要がありますか?私はそれを取り除き、0.01に下げようとしました - 事実上効果なし –

0

あなたが分類したいデータが線形分離可能であるか、パーセプトロン学習アルゴリズムが収束しないことを確認してください。

+0

私はすべての時にエラーを使用していません。それはどうやって学びますか? –

+0

線形分離可能なランダム点の集合を生成するにはどうすればよいですか? –

+0

誤って分類された例をランダムに選択し、重みを回答で更新する必要があります(間違っています)。実際に各例を掛け合わせるとうまくいかないでしょう。 – Octoplus

関連する問題