tensorflow,model,object_detection,訓練loss先下降后遞增,到幾百萬,解決tensorflow,model,object,detection,loss,incease


現象:訓練loss一開始下降一部分,跌代到若干次(具體多少和你的learning rate大小有關,大就迭代小就發生,小就需要多幾次迭代)

日志如下(下面的日志來源於網絡,我自己的日志已經clear掉了,不過不影響): INFO:tensorflow:global step 272: loss = 0.2479 (0.158 sec/step) INFO:tensorflow:global step 273: loss = 0.3874 (0.159 sec/step) INFO:tensorflow:global step 274: loss = 0.2599 (0.158 sec/step) INFO:tensorflow:global step 275: loss = 27207767073038008320.0000 (0.155 sec/step) INFO:tensorflow:global step 276: loss = 363770730445224804352.0000 (0.154 sec/step) INFO:tensorflow:global step 277: loss = 2319587573063963639808.0000 (0.157 sec/step) INFO:tensorflow:global step 278: loss = 9538479895582634672128.0000 (0.155 sec/step) INFO:tensorflow:global step 279: loss = 35610680577759077466112.0000 (0.153 sec/step)

網上說是可能數據增強的原因,但是根據現象,為什么一開始是正常的呢。知道我我看一個網上的同學說,他發現是他的
label_map.pbtxt中是有5個類別,但是在pipline.config中number_class:4,導致出現不一致,后面該同學修改過來就可以了。

我的解決是,我在label_map.pbtxt中的id是1,name:cat,但是在生成tfrecord的時候是cats,這導致了不一致,使得訓練中獲取lable1出錯。

為什么現象是loss先降低后崩掉(梯度爆炸中比較特殊的一種吧,個人認為)這樣呢?
因為,一開始模型還處於非工作狀態,在first stage的時候,模型通過識別到目標使得loss下降,當模型訓練到一定程度,對目標識別越來越好,second
loss開始占主導或者second-stage輸入變得有規律,不再隨機,這時候,需要識別具體是什么目標的時候,tfrecord里面的label是cats,在label_map.pbtxt需要找到
對應的id時,這時候因為“label_map.pbtxt中的id是1,name:cat,但是在生成tfrecord的時候是cats”不一致,導致沒取到id,這時就開始亂套了。

所以,做數據要仔細呀


免責聲明!

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



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