0
나는 파이썬에서 OR, AND 같은 논리 함수를 분류 할 수있는 간단한 퍼셉트론을 구현하려고합니다.퍼셉트론이 올바르게 훈련되지 않았습니다 - 루프 오류입니까?
내가 파이썬에서 다음 코드를 가지고
바이어스 각 입력 벡터의 세 번째 항목이다. '올바른'값을 포함하는 '대상'이라는 레이블이있는 행 벡터가 있습니다.
가중치가 제대로 업데이트되지 않는 것이 문제입니다. 그들은 무작위로 남아있어서, 실제로 훈련 된 것이 아무것도 없다고합니다.
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)