现象:训练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.pbtxt
label_map.pbtxtlabel_map.pbtxt
中的id是1,name:cat,可是在生成tfrecord的时候是catslabel_map.pbtxt