2017-12-01 3 views
0

나는 파이썬에서 OR, AND 같은 논리 함수를 분류 할 수있는 간단한 퍼셉트론을 구현하려고합니다.퍼셉트론이 올바르게 훈련되지 않았습니다 - 루프 오류입니까?

Example AND-gate

내가 파이썬에서 다음 코드를 가지고

바이어스 각 입력 벡터의 세 번째 항목이다. '올바른'값을 포함하는 '대상'이라는 레이블이있는 행 벡터가 있습니다.

가중치가 제대로 업데이트되지 않는 것이 문제입니다. 그들은 무작위로 남아있어서, 실제로 훈련 된 것이 아무것도 없다고합니다.

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,하지만 난 당신이 목표로하고 생각하는 일을 할 것입니다. 앞으로 Sigmoid 함수 등을 사용하여 0과 1에 가까운 결과를 얻을 수 있습니다.

관련 문제