0

単層パーセプトロンの実装に苦労しています: http://en.wikipedia.org/wiki/Perceptron。私のプログラムは、重みに応じて、学習ループで失われるか、間違った重みを見つけます。テスト ケースとして、論理 AND を使用します。私のパーセプトロンが収束しない理由を教えてください。これは自分の学習用です。ありがとう。

# learning rate
rate = 0.1

# Test data
# logical AND
# vector = (bias, coordinate1, coordinate2, targetedresult)

testdata = [[1, 0, 0, 0], [1, 0, 1, 0], [1, 1, 0, 0], [1, 1, 1, 1]]

# initial weigths
import random
w = [random.random(), random.random(), random.random()]
print 'initial weigths = ', w

def test(w, vector):
    if diff(w, vector) <= 0.1:
        return True
    else:
        return False

def diff(w, vector):
    from copy import deepcopy
    we = deepcopy(w)
    return dirac(sum(we[i]*vector[i] for i in range(3))) - vector[3]

def improve(w, vector):
    for i in range(3):
        w[i] += rate*diff(w, vector)*vector[i]
    return w

def dirac(z):
    if z > 0:
        return 1
    else:
        return 0

error = True

while error == True:
    discrepancy = 0
    for x in testdata:
        if not test(w, x):
            w = improve(w, x)
            discrepancy += 1
    if discrepancy == 0:
        print 'improved weigths = ', w
        error = False
4

2 に答える 2

1

ソリューションが収束するまで改善を繰り返すために、 for ループを囲む追加のループが必要なようです (リンクした Wikipedia ページのステップ 3)。

現状では、各トレーニング ケースに重みを更新する機会を 1 回だけ与えるため、収束する機会はありません。

于 2013-04-12T08:36:38.863 に答える