CRNN训练的时候Loss一直是0
鹿鼎记肯定 发布于2020-11-21 17:14 浏览:981 回复:24
0
收藏

下面还有很多step,也都是0。。。

就是想问一下哪些原因会导致这种情况

收藏
点赞
0
个赞
共24条回复 最后由scq3333回复于2020-12-22 19:29
#10鹿鼎记肯定回复于2020-11-22 19:42:14

找到原因了!果然是ctc_loss函数计算出问题

ctc_loss函数里头有个参数叫做 label_lengths ,这是用来标识label中每个序列的长度,之所以说 每个,是因为这个参数的shape是 [batch_size]。

因为CRNN里头的训练标签是不定长的,而定义占位符InputSpec的时候需要指定shape。有两种办法可以实现,一个是把所有标签padding到最长的标签,一个是用LoDTensor。然而LoDTensor在2.0rc里面没找到相关使用方法介绍,就用的padding,于是乎在ctc_loss函数里把label_lengths都写成了最长标签的值。

解决办法也很简单,重新写一个list统计每个label的长度,然后用这个list作为参数label_lengths。

至于为什么会得到0,这个还得研究研究......

1
#25scq3333回复于2020-12-22 19:29:58
#10 鹿鼎记肯定回复
找到原因了!果然是ctc_loss函数计算出问题 ctc_loss函数里头有个参数叫做 label_lengths ,这是用来标识label中每个序列的长度,之所以说 每个,是因为这个参数的shape是 [batch_size]。 因为CRNN里头的训练标签是不定长的,而定义占位符InputSpec的时候需要指定shape。有两种办法可以实现,一个是把所有标签padding到最长的标签,一个是用LoDTensor。然而LoDTensor在2.0rc里面没找到相关使用方法介绍,就用的padding,于是乎在ctc_loss函数里把label_lengths都写成了最长标签的值。 解决办法也很简单,重新写一个list统计每个label的长度,然后用这个list作为参数label_lengths。 至于为什么会得到0,这个还得研究研究......
展开

厉害

0
#24鹿鼎记肯定回复于2020-12-01 22:40:13
#23 189******30回复
这得请老中医号号脉了~~

太玄乎了

0
#23189******30回复于2020-12-01 22:39:14
#22 鹿鼎记肯定回复
网络“麻雀”还是数据“麻雀”都不太管用

这得请老中医号号脉了~~

0
#22鹿鼎记肯定回复于2020-11-30 20:32:31
#21 189******30回复
不行用“麻雀”先跑下吧~~

网络“麻雀”还是数据“麻雀”都不太管用

0
#21189******30回复于2020-11-30 10:27:09
#20 鹿鼎记肯定回复
不过新的问题,训练集的loss下不去。。。从第一个epoch就卡在7附近。。 大佬们,99孩子吧
展开

不行用“麻雀”先跑下吧~~

0
#20鹿鼎记肯定回复于2020-11-28 22:47:20

不过新的问题,训练集的loss下不去。。。从第一个epoch就卡在7附近。。

大佬们,99孩子吧

0
#19screamdw回复于2020-11-28 19:27:37

恭喜又出一坑~~

0
#18西南交大开源回复于2020-11-25 10:39:09
#17 鹿鼎记肯定回复
这也不算是梯度消失吧,毕竟都有正则“强制”拉回数据

有时候正则也拉不回来

0
#17鹿鼎记肯定回复于2020-11-24 18:40:50
#16 西南交大开源回复
CRNN就容易出现梯度消失

这也不算是梯度消失吧,毕竟都有正则“强制”拉回数据

0
#16西南交大开源回复于2020-11-24 17:21:32
#10 鹿鼎记肯定回复
找到原因了!果然是ctc_loss函数计算出问题 ctc_loss函数里头有个参数叫做 label_lengths ,这是用来标识label中每个序列的长度,之所以说 每个,是因为这个参数的shape是 [batch_size]。 因为CRNN里头的训练标签是不定长的,而定义占位符InputSpec的时候需要指定shape。有两种办法可以实现,一个是把所有标签padding到最长的标签,一个是用LoDTensor。然而LoDTensor在2.0rc里面没找到相关使用方法介绍,就用的padding,于是乎在ctc_loss函数里把label_lengths都写成了最长标签的值。 解决办法也很简单,重新写一个list统计每个label的长度,然后用这个list作为参数label_lengths。 至于为什么会得到0,这个还得研究研究......
展开

CRNN就容易出现梯度消失

0
#15189******30回复于2020-11-24 16:00:34
#14 鹿鼎记肯定回复
对,ctc_loss有很多参数,其中label_lengths需要说明每个label的长度,虽然每个label都paddign到90,但填充的不能作为label_len参与计算
展开

恭喜又出一坑~~

0
#14鹿鼎记肯定回复于2020-11-23 21:58:19
#13 189******30回复
不是说不定长的序列可以补0处理么?

对,ctc_loss有很多参数,其中label_lengths需要说明每个label的长度,虽然每个label都paddign到90,但填充的不能作为label_len参与计算

0
#13189******30回复于2020-11-23 14:32:38
#10 鹿鼎记肯定回复
找到原因了!果然是ctc_loss函数计算出问题 ctc_loss函数里头有个参数叫做 label_lengths ,这是用来标识label中每个序列的长度,之所以说 每个,是因为这个参数的shape是 [batch_size]。 因为CRNN里头的训练标签是不定长的,而定义占位符InputSpec的时候需要指定shape。有两种办法可以实现,一个是把所有标签padding到最长的标签,一个是用LoDTensor。然而LoDTensor在2.0rc里面没找到相关使用方法介绍,就用的padding,于是乎在ctc_loss函数里把label_lengths都写成了最长标签的值。 解决办法也很简单,重新写一个list统计每个label的长度,然后用这个list作为参数label_lengths。 至于为什么会得到0,这个还得研究研究......
展开

不是说不定长的序列可以补0处理么?

0
#12鹿鼎记肯定回复于2020-11-22 19:44:06
#9 189******30回复
模型是现成的,换别的数据集试试,先看看是不是数据集处理的原因

但是这个谁又能想到呢。。。看来光学理论知识是不够的,工程能力也得跟上

0
#11鹿鼎记肯定回复于2020-11-22 19:43:25
#9 189******30回复
模型是现成的,换别的数据集试试,先看看是不是数据集处理的原因

确实是数据处理的问题,我想一般的错误也都是出现在这里

0
#9189******30回复于2020-11-22 09:19:33

模型是现成的,换别的数据集试试,先看看是不是数据集处理的原因

0
#8189******30回复于2020-11-22 09:17:14
#6 鹿鼎记肯定回复
咋试

就像修电脑,替换法

0
#7189******30回复于2020-11-22 09:03:41
#5 鹿鼎记肯定回复
一上来就是0,这谁顶得住啊

弟兄们,顶住!顶住!~~

0
#6鹿鼎记肯定回复于2020-11-21 22:42:13
#3 189******30回复
先大体定位下问题所在? 看看是数据部分,还是模型部分的问题,用paddlehub试试数据先~
展开

咋试

0
TOP
切换版块