使用caffe训练时Loss变为nan的原因
極視角高校計(jì)算機(jī)視覺算法邀請(qǐng)賽目前正在報(bào)名中,歡迎各高校在讀學(xué)生報(bào)名參加,大獎(jiǎng)+商業(yè)項(xiàng)目參與機(jī)會(huì)+數(shù)據(jù)庫等你來拿!!!咨詢報(bào)名請(qǐng)加小助手(微信號(hào):Extreme-Vision)
本文為極市平臺(tái)原創(chuàng)編譯,作者纓寧,首發(fā)地址 原創(chuàng)|使用caffe訓(xùn)練時(shí)Loss變?yōu)閚an的原因。
梯度爆炸
原因:梯度變得非常大,使得學(xué)習(xí)過程難以繼續(xù)
現(xiàn)象:觀察log,注意每一輪迭代后的loss。loss隨著每輪迭代越來越大,最終超過了浮點(diǎn)型表示的范圍,就變成了NaN。
措施:
1. 減小solver.prototxt中的base_lr,至少減小一個(gè)數(shù)量級(jí)。如果有多個(gè)loss layer,需要找出哪個(gè)損失層導(dǎo)致了梯度爆炸,并在train_val.prototxt中減小該層的loss_weight,而非是減小通用的base_lr。
2. 設(shè)置clip gradient,用于限制過大的diff
?
不當(dāng)?shù)膿p失函數(shù)
原因:有時(shí)候損失層中l(wèi)oss的計(jì)算可能導(dǎo)致NaN的出現(xiàn)。比如,給InfogainLoss層(信息熵?fù)p失)輸入沒有歸一化的值,使用帶有bug的自定義損失層等等。
現(xiàn)象:觀測(cè)訓(xùn)練產(chǎn)生的log時(shí)一開始并不能看到異常,loss也在逐步的降低,但突然之間NaN就出現(xiàn)了。
措施:看看你是否能重現(xiàn)這個(gè)錯(cuò)誤,在loss layer中加入一些輸出以進(jìn)行調(diào)試。
示例:有一次我使用的loss歸一化了batch中l(wèi)abel錯(cuò)誤的次數(shù)。如果某個(gè)label從未在batch中出現(xiàn)過,loss就會(huì)變成NaN。在這種情況下,可以用足夠大的batch來盡量避免這個(gè)錯(cuò)誤。
?
不當(dāng)?shù)妮斎?/strong>
原因:輸入中就含有NaN。
現(xiàn)象:每當(dāng)學(xué)習(xí)的過程中碰到這個(gè)錯(cuò)誤的輸入,就會(huì)變成NaN。觀察log的時(shí)候也許不能察覺任何異常,loss逐步的降低,但突然間就變成NaN了。
措施:重整你的數(shù)據(jù)集,確保訓(xùn)練集和驗(yàn)證集里面沒有損壞的圖片。調(diào)試中你可以使用一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)來讀取輸入層,有一個(gè)缺省的loss,并過一遍所有輸入,如果其中有錯(cuò)誤的輸入,這個(gè)缺省的層也會(huì)產(chǎn)生NaN。
案例:有一次公司需要訓(xùn)練一個(gè)模型,把標(biāo)注好的圖片放在了七牛上,拉下來的時(shí)候發(fā)生了dns劫持,有一張圖片被換成了淘寶的購物二維碼,且這個(gè)二維碼格式與原圖的格式不符合,因此成為了一張“損壞”圖片。每次訓(xùn)練遇到這個(gè)圖片的時(shí)候就會(huì)產(chǎn)生NaN。良好的習(xí)慣是,你有一個(gè)檢測(cè)性的網(wǎng)絡(luò),每次訓(xùn)練目標(biāo)網(wǎng)絡(luò)之前把所有的樣本在這個(gè)檢測(cè)性的網(wǎng)絡(luò)里面過一遍,去掉非法值。
?
池化層中步長(zhǎng)比核的尺寸大
如下例所示,當(dāng)池化層中stride > kernel的時(shí)候會(huì)在y中產(chǎn)生NaN
layer {name: "faulty_pooling"type: "Pooling"bottom: "x"top: "y"pooling_param {pool: AVEstride: 5kernel: 3}}?
致謝
Common causes of nans during training
歡迎關(guān)注微信公眾號(hào)極市平臺(tái)(微信id:extrememart)獲取更多計(jì)算機(jī)視覺行業(yè)內(nèi)的資訊及信息。
PS.目前極市擁有上千名視覺算法開發(fā)者,分別來自騰訊,華為,百度,網(wǎng)易,聯(lián)想,努比亞等名企,以及北大,清華,北航,中科院,交大等名校,更邀請(qǐng)了李開復(fù)老師入駐微信群,歡迎從業(yè)者加入極市專業(yè)CV開發(fā)者微信群(分享干貨資訊,行業(yè)內(nèi)人交流),請(qǐng)?zhí)顚憳O市算法開發(fā)者調(diào)研問卷申請(qǐng)入群~
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的使用caffe训练时Loss变为nan的原因的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yolov3/tiny-yolov3训练
- 下一篇: Qt学习之路