下面还有很多step,也都是0。。。
就是想问一下哪些原因会导致这种情况
百度出来的唯一一个原因是二分类把交叉熵用成了softmax
先大体定位下问题所在?
看看是数据部分,还是模型部分的问题,用paddlehub试试数据先~
我感觉每次没什么头绪的debug都是从大模块儿替换开始定位
一上来就是0,这谁顶得住啊
咋试
弟兄们,顶住!顶住!~~
就像修电脑,替换法
模型是现成的,换别的数据集试试,先看看是不是数据集处理的原因
找到原因了!果然是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处理么?
对,ctc_loss有很多参数,其中label_lengths需要说明每个label的长度,虽然每个label都paddign到90,但填充的不能作为label_len参与计算
恭喜又出一坑~~
CRNN就容易出现梯度消失
这也不算是梯度消失吧,毕竟都有正则“强制”拉回数据
有时候正则也拉不回来
不过新的问题,训练集的loss下不去。。。从第一个epoch就卡在7附近。。
大佬们,99孩子吧
不行用“麻雀”先跑下吧~~
百度出来的唯一一个原因是二分类把交叉熵用成了softmax
先大体定位下问题所在?
看看是数据部分,还是模型部分的问题,用paddlehub试试数据先~
我感觉每次没什么头绪的debug都是从大模块儿替换开始定位
一上来就是0,这谁顶得住啊
咋试
弟兄们,顶住!顶住!~~
就像修电脑,替换法
模型是现成的,换别的数据集试试,先看看是不是数据集处理的原因
找到原因了!果然是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处理么?
对,ctc_loss有很多参数,其中label_lengths需要说明每个label的长度,虽然每个label都paddign到90,但填充的不能作为label_len参与计算
恭喜又出一坑~~
CRNN就容易出现梯度消失
这也不算是梯度消失吧,毕竟都有正则“强制”拉回数据
有时候正则也拉不回来
恭喜又出一坑~~
不过新的问题,训练集的loss下不去。。。从第一个epoch就卡在7附近。。
大佬们,99孩子吧
不行用“麻雀”先跑下吧~~