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,這時就開始亂套了。

因此,作數據要仔細呀label_map.pbtxttfrecordcatslabel_map.pbtxtlabel_map.pbtxtlabel_map.pbtxt中的id是1,name:cat,可是在生成tfrecord的時候是catslabel_map.pbtxt
相關文章
相關標籤/搜索