深度學習中損失值(loss值)為nan(以tensorflow為例)


我做的是一個識別驗證碼的深度學習模型,識別的圖片如下

驗證碼圖片識別4個數字,數字間是有順序的
驗證碼圖片識別4個數字,數字間是有順序的,設立標簽時設計了四個onehot向量鏈接起來,成了一個長度為40的向量,然后模型的輸入也是40維向量
用softmax_cross_entropy_with_logits(labels=,logits=)函數計算輸出與標簽的損失,發現損失值一直在增大,直到nan。
然后打印了輸出值,發現也是很大。覺得是梯度爆炸的原因,用梯度裁剪、限制權重值等方法一通結束之后發現根本沒什么改變。
最后只放入兩張圖片,發現模型擬合的仍然不夠好。這么大的網絡不能擬合好兩張圖片顯然是不對的。我將正則化、droupout、滑動平均全部注釋掉,將代碼化簡到最小,並且替換了之前的沒有問題的別的模型,扔存在這個問題。想到了應該處在最原始的圖片標簽與損失函數上,檢查了圖片標簽發現都能對應上,最后看損失函數發現softmax_cross_entropy_with_logits(labels=,logits=)損失函數算40維向量之間的損失的實際意義是計算40個分類中排名最靠前的4中可能,與分別計算4個10分類onehot值不同。總之是哪里出了問題,於是將標簽與輸出值都做了處理,分解成4個y=tf.reshape(y,[-1,4,10])。再用同樣的損失函數處理。loss值立馬下降。這里的問題我還沒有太想明白,只是初步分析了一下解決的方法。如果有大神知道其中的緣由希望給予指點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM