1. 程式人生 > >Yolo v2 訓練 NAN解決過程

Yolo v2 訓練 NAN解決過程

問題描述

今天在用yolo訓練自己的資料集的時候,一開始訓練過程中的loss還很正常地在下降。結果到了幾個個batch的地方突然就出現loss = nan的情況。其實到現在自己也沒有發現到底是什麼導致了nan,但是參考上面這篇文章,至少暫時解決了這個問題。

解決過程

1)首先檢查了程式碼是不是對的。一般出現nan,第一反應是:會不會哪裡出現了分母為0,或者log的真值為負數這樣的情況。然後在自己修改過的原始碼裡面檢查了一遍,發現並沒有出現這個問題。

2)然後參考上面這篇文章,檢查了一下我的資料集有沒有問題。首先圖片自己看過是沒有問題的,然後拿另外一個模型在這個資料集上跑,也沒有問題。因此排除資料集出問題的可能。

3)最後擔心是不是梯度在某一個batch的時候突然爆炸了。因此修改原始碼detector.c,訓練的時候每一個batch都列印一下當前的loss。發現出現nan之前都會有一個batch的loss=inf。因為yolo的loss函式的定義就是均方差,因此,loss就等於梯度的平方。所以判斷應該是某一個batch使得梯度突然增大。參考caffe的方法。設定一定的閾值,使得當梯度超過這個閾值的時候,直接設定為該閾值大小。暫時解決了nan的問題