1

하나의 숨겨진 레이어와 시그 모이 드 활성화 기능을 가진 신경망에 대한 배치 기반 역 전파 알고리즘을 구현합니다. 출력 레이어는 1 핫 시그 모이 드 레이어입니다. 첫 번째 레이어의 그물은 z1입니다. 시그 모이 드를 적용한 후에는 a1이됩니다. 비슷하게 두 번째 레이어에는 z2와 a2가 있습니다.신경망 손실이 감소하지만 정확도가 증가하지 않을 때?

x, y = train_data, train_target 
for i in range(0, num_passes): 
    # call 
    z1, a1, z2, a2 = predict(current_model, x) 

    # recall 
    derv_out2 = (y - a2) * (a2 * (1 - a2)) 
    delta2 = np.matmul(np.transpose(a1), derv_out2)/train_size 
    dw2 = delta2 + reg_lambda * w2 
    db2 = np.mean(b2 * derv_out2, 0) 

    derv_out1 = a1 * np.reshape(np.sum(delta2 * w2, 1), [1, a1.shape[1]]) 
    delta1 = np.matmul(np.transpose(x), derv_out1)/train_size 
    dw1 = delta1 + reg_lambda * w1 
    db1 = np.mean(b1 * derv_out1, 0) 

    # gradient descent parameter update 
    w1 += learning_rate * dw1 
    b1 += learning_rate * db1 
    w2 += learning_rate * dw2 
    b2 += learning_rate * db2 

    # assign new parameters to the model 
    current_model = {'w1': w1, 'b1': b1, 'w2': w2, 'b2': b2} 

전체 코드 파일 :

백 전파 과정은 다음과 같이이다 link

위의 알고리즘의 손실이 감소하고 있지만, 분류의 정확성에 대한 임의 선택이 될 것입니다. 문제가 무엇입니까?

+0

정확도 메트릭은 간단한 av (합계 (1 또는 0))이지만 손실량은 전체 출력 벡터와 원하는 값의 비교를 기반으로합니다. 그물을 실행할 때 진실/거짓 정확도 테스트가 나아지지 않으면 서 출력 벡터 차이가 더 작아 질 수 있습니다. 당신의 손실을 단순화한다면 ... – bivouac0

+0

'np.sqrt (np.sum (np.square (output - target)))'''learning_rate = 1.0'을 설정하면 정확도와 손실 모두를 볼 수 있습니다. 약간의 반복과 많은 변화를주지 않는다. 더 큰 문제는 여기에 잘못된 업데이트를 제공하는 델타 계산 오류입니다. (여기 여러 의견에 대해 죄송합니다 - 우연히 사고로 입력하십시오) – bivouac0

+0

재미로 저는 최적화 코드/모델을 Keras의 해당 코드로 대체했습니다. SDG 최적화와 50,000의 배치 크기를 사용하여 최적화하지 않았습니다 (적어도 적절한 시간에는 그렇지 않았습니다). 배치 크기를 128로 변경하면 백 에포크 정도가 최적화됩니다. 최적화 도구를 RMSProp (128 배치)로 전환하면 첫 번째 기점 이후에 최적화 된 최적화가 이루어졌습니다. 데이터를 처리 할 수있는 최적화 알고리즘이 충분하지 않을 수 있습니다. 이런 식으로해야한다면 작은 배치 크기와 많은 반복을 시도 할 것입니다. – bivouac0

답변

0

@ bivouac0 코멘트를 기반으로 학습 속도를 조정하려고합니다. 학습 속도가 0.1 또는 0.01 인 것은 초등 단계 (학습 시간이 길어짐)에서 매우 낮은 것으로 나타났습니다. 이후 학습 속도를 조정할 수있는 적응 형 접근법을 구현합니다 (손실이 오름차순으로 내려갈 때 비율을 높이십시오). 이 방법을 사용하면 정확도가 크게 향상되었습니다.