2016-11-25 3 views
4

손실에 대해 tf.nn.sigmoid_cross_entropy_with_logits 함수를 사용하고 있으며 NaN으로갑니다.Tensorflow 손실 NaN으로 이동

저는 이미 그라디언트 클리핑을 사용하고 있습니다. 텐서 분할이 수행되는 곳이 하나 있습니다. 엡실론을 추가하여 0으로 나누지 않도록하고, 모든 softmax 함수에 대한 인수에도 엡실론이 추가되었습니다.

그러나 나는 훈련을 통해 NaN의 중도를 얻고 있습니다.

내가 놓친 tensorflow와 관련하여 알려진 문제가 있습니까? 교육 과정에서 손실이 무작위로 NaN으로 이동하고 모든 것을 망쳐 버리기 때문에 상당히 실망 스럽습니다.

또한 열차 단계가 NaN이되고 해당 예제를 모두 건너 뛸 지 여부를 감지하려면 어떻게해야합니까? 어떤 제안?

EDIT : 네트워크는 신경 튜링 기계입니다.

편집 2 : 코드 here을 업로드했습니다. Graves 등이 이미 NTM 논문을 읽은 사람들에게는 주석을 달지 않았으며 가장 이해하기 쉽습니다. 여기에서 이용 가능 : https://arxiv.org/abs/1410.5401

내 코드가 모두 종이의 의도와 정확히 일치하는지 여부는 확실하지 않습니다. 나는 단지 연습으로 이것을하고 있고 나는 저를 바로 잡을 멘토가 없습니다.

편집 3 :

optimizer = tf.train.AdamOptimizer(self.lr) 
gvs = optimizer.compute_gradients(loss) 
capped_gvs =\ 
    [(tf.clip_by_value(grad, -1.0, 1.0), var) if grad != None else (grad, var) for grad, var in gvs] 
train_step = optimizer.apply_gradients(capped_gvs) 

나는 그것을하지 않고 오류가 발생했기 때문에 나는 if grad != None 조건을 추가했다 : 여기에 그라데이션 클리핑에 대한 코드입니다. 문제가 여기에있을 수 있습니까?

잠재적 해결책 : 지금 당분간 tf.contrib.losses.sigmoid_cross_entropy를 사용하고 있으며, 지금까지는 손실이 분산되지 않았습니다. 좀 더 테스트하고 다시보고 할 것입니다.

+2

첫 번째 아이디어는 학습 속도를 줄이는 것입니다. – sygi

+0

나는 그라데이션 클리핑과 함께 Adam Optimizer를 사용하고 있으므로 학습 속도를 얼마나 많이 변경하면 도움이 될지 알 수 없습니다. 나는 학습 속도를 줄이려고 노력했지만 NaN에도 여전히갔습니다. 실제로, 비율을 내리기 전에, 그것은 문제없이 훈련을 끝내었고, 나는 어떻게 든 문제를 해결했다고 생각했지만, 그렇지 않았다. – SilverSlash

+0

각 레이어 앞에 매우 작은 가우스 노이즈를 추가하려고 했습니까? – broncoAbierto

답변

0

학습 속도에 1e-4를 사용하십시오. Adam 최적화 도구로 항상 저를 위해 작동하는 것 같습니다. 그래디언트 클립을 적용하더라도 여전히 갈라질 수 있습니다. 또한 모든 음의 입력에 대해 안정적 일지라도 값이 0에 가까워지면 그 기울기가 발산하기 때문에 또 다른 비열한 방법은 제곱근을 취하는 것입니다. 마지막으로 모델에 대한 모든 입력이 합리적인지 확인하고 확인합니다.

+0

실제로 그래프에서 제곱근 계산이 있지만 제곱근은 텐서의 12 놈의 일부로 계산됩니다. 그래서 저는 제곱근을 취하기 전에 tf.square()를 사용하여 제곱을 구합니다. 제곱 한 후에도 0으로 나누는 것을 피하기 위해 엡실론을 추가했습니다. – SilverSlash

+0

tf.nn.l2_loss 기능을 사용해보십시오. sqrt 앞에 무언가를 정하면 중요하지 않습니다. 그것은 여전히 ​​갈라지게 될 것이다. 오류가 줄어들고 sqrt의 우울한 정도가 갈라지기 때문에 훈련을 한 후에 만 ​​발산합니다. – chasep255

+0

dim 인수를 사용하지 않으므로 tf.nn.l2_loss를 사용할 수 없습니다. 그것은 텐서의 모든 요소를 ​​합한 것입니다. 특정 차원 이상으로해야합니다. – SilverSlash

관련 문제