の点の位置を推測するために、私は彼が与えられた点(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)
ここに結果が表示されます。緑の色は、パーセプトロンがそれを正しく推測し、赤の色がミスを示すことを示します。 面白いこと - それはラインの下の点で間違っている傾向があります。
プログラムを改善するにはどうすればよいですか?
完全なコード:CLICK
SOLUTION
せることなく、ブルート定数(完全なコードの行14)としてバイアス入力を使用していた私の問題それを学ぶアルゴリズム。 これで、私の入力は[バイアス、x、y]になり、ウェイトは[w1、w3、w3]になりました。
もう一つの良いアイデアは、アルゴリズムを使用して、プログラムをテストするたびに、最初からやり直す必要がないので、どこか別の重みを保存することです。
私...のみ乱数を生成する '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
'Perceptron'も使うコードを投稿してください。私はそれを作る必要はありません:) – bakkal