當我試圖在tensorflow中使用sparse_softmax_cross_entropy_with_logits損失函數時,我得到了NaN。我有一個簡單的網絡,是這樣的:NaN from Sparse_softmax_cross_entropy_with_logits in Tensorflow
layer = tf.nn.relu(tf.matmul(inputs, W1) + b1)
layer = tf.nn.relu(tf.matmul(inputs, W2) + b2)
logits = tf.matmul(inputs, W3) + b3
loss = tf.sparse_softmax_cross_entropy_with_logits(logits, labels)
我有很多類(〜10000),所以我想我得到NaN的,因爲相應的糾正我的例子至少一個班的Logit得到截斷爲零。有沒有辦法避免這種情況?
你能解釋一下你的意思是「標籤超出範圍」嗎?我認爲對於每個樣本,標籤都是與logit匹配的向量長度。我試過'a = tf.constant(np.array([[200.1,20000.3,.5,.9],[1.0,10000.0,10.0,10.0])) l = tf.constant(np.array([ [1,1,1,1,1],[1,0,0]])) s.run(tf.nn.softmax_cross_entropy_with_logits(logits = a,labels = 1))'。當維度不匹配時,會抱怨維度;如果概率> 1,則不會導致錯誤或「NaN」。 「14000標籤」是什麼意思? –
區別在於我使用'tf。sparse_softmax_cross_entropy_with_logits「,因此輸入是標籤的索引。當我說超出範圍時,我的意思是我提供了(例如)索引23,而每個例子只提供了7個logits。 –