2016-10-14 5 views
8

아마도 너무 일반적인 질문이지만, 어떤 사람이 갈비 신경 네트워크가 갈라 지는지 설명 할 수 있습니까?Tensorflow 난 손실 이유

구체적인 :

난 내 자신의 일부 데이터와 Tensorflow의 iris_training 모델을 사용하고

ERROR:tensorflow:Model diverged with loss = NaN.

Traceback...

tensorflow.contrib.learn.python.learn.monitors.NanLossDuringTrainingError: NaN loss during training.

트레이스 백 라인과 유래 점점 계속하고있다 : 나는 조정 시도했습니다

tf.contrib.learn.DNNClassifier(feature_columns=feature_columns, 
             hidden_units=[300, 300, 300], 
             #optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=0.001, l1_regularization_strength=0.00001),               
             n_classes=11, 
             model_dir="/tmp/iris_model") 

최적화 알고리즘, 학습 속도에 0을 사용하고 최적화 도구를 사용하지 않음. 네트워크 레이어, 데이터 크기 등에 대한 통찰력은 인정됩니다.

+1

학습 속도가 너무 빠르면 SGD가 무한대로 분산 될 수 있습니다. –

+0

@ YaroslavBulatov 1 시간 15 분 정도의 학습 속도로 AdagradOptiizer를 사용해 보았습니다. 아마도 내 데이터가 SGD에 적합하지 않을 수 있습니다. 다른 알고리즘을 제안 할 수 있습니까? Tensorflow 및 Deep Learning을 아직 처음 사용합니다. 고장에 대해 감사합니다. – Zroach

답변

22

모델을 여러 개 만들었습니다.

1) 학습률이 너무 높습니다. 손실이 증가하기 시작한 다음 무한대로 갈라지는 경우가 종종 있는지를 알 수 있습니다.

2) 나는 DNNClassifier에 익숙하지 않지만 카테고리 간 엔트로피 비용 함수를 사용한다고 추측합니다. 이것은 예측이 0에 가까워 질 때 발산하는 예측의 로그를 취하는 것을 포함합니다. 그래서 사람들은 보통 이러한 발산을 방지하기 위해 작은 엡실론 값을 예측에 추가합니다. 나는 DNNClassifier가 아마도 이것을하거나 tensorflow opp를 사용한다고 추측합니다. 아마도 문제는 아닙니다.

3) 엡실론을 추가하면 도움이 될 수있는 0으로 나누기와 같은 다른 수치 안정성 문제가있을 수 있습니다. 파생 된 제곱근이 유한 정밀도를 다룰 때 적절하게 단순화되지 않으면 분기 될 수있는 또 다른 덜 분명한 것도 있습니다. 그러나 나는 이것이 DNN 분류 자의 경우에 문제가되는지 의심 스럽습니다.

4) 입력 데이터에 문제가있을 수 있습니다. 입력 데이터에 assert not np.any(np.isnan(x))을 호출하여 nan을 도입하지 않도록하십시오. 또한 모든 목표 값이 유효한지 확인하십시오. 마지막으로 데이터가 올바르게 표준화되었는지 확인하십시오. [-1, 1]이고 [0, 255]가 아닌 범위의 픽셀을 원할 수도 있습니다.

5) 레이블은 손실 함수의 도메인에 있어야하므로 대수 기반 손실 함수를 사용하는 경우 모든 레이블은 0보다 커야합니다 (evan pu 및 아래 설명 참조).

+0

. 제 라벨은 제로 (예 : [-5, ..., 5])를 중심으로 대칭입니다. 이동은 문제를 해결했습니다. – Zroach

+1

라벨은 바이너리이어야합니다. 그렇지 않으면 범주 적 크로스 엔트로피 비용 함수는 의미가 없습니다. – chasep255

+0

이진수 [000, ..., 110]로 표현 하시겠습니까? 나는 교차 엔트로피 함수에 대해 무슨 뜻인지 알 겠지만 구현에 달려 있다고 생각합니까? 나는이 시점에서 0에서 10까지의 라벨에 문제가 없다. 적어도 발산은 아니다. 이것은 컴퓨터 비전 모델은 아니지만 상호 배타적 인 레이블이 많이 있다는 점에서 cifar-10과 유사합니다. – Zroach

1

대상으로 정수를 사용하는 경우는, 반드시 그들이, 0

즉에 대칭없는 클래스 -1, 0, 대신 1. 0, 1, 2

2

를 사용하지 않을 수 있습니다 교차 엔트로피를 연습하는 경우 출력 확률에 1e-8과 같은 작은 숫자를 추가하고 싶습니다.

로그 (0) 모델이 출력 분포가 매우 왜곡 될 것입니다 충분한 훈련 음의 무한대가 있기 때문에 인스턴스의 시작 나의 확률이

0.25 0.25 0.25 0.25 
모양에 나는, 4 급 출력을하고 있어요 말

그러나 끝으로 확률은 아마

1.0 0 0 0 

모양을 그리고 당신은 폭발이 배포의 모든 것을 십자가 엔트로피를 취할. 이 문제를 방지하려면 모든 용어에 인공적으로 작은 숫자를 추가하십시오.