손실에 대해 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를 사용하고 있으며, 지금까지는 손실이 분산되지 않았습니다. 좀 더 테스트하고 다시보고 할 것입니다.
첫 번째 아이디어는 학습 속도를 줄이는 것입니다. – sygi
나는 그라데이션 클리핑과 함께 Adam Optimizer를 사용하고 있으므로 학습 속도를 얼마나 많이 변경하면 도움이 될지 알 수 없습니다. 나는 학습 속도를 줄이려고 노력했지만 NaN에도 여전히갔습니다. 실제로, 비율을 내리기 전에, 그것은 문제없이 훈련을 끝내었고, 나는 어떻게 든 문제를 해결했다고 생각했지만, 그렇지 않았다. – SilverSlash
각 레이어 앞에 매우 작은 가우스 노이즈를 추가하려고 했습니까? – broncoAbierto