Holmeyoung / crnn-pytorch

Pytorch implementation of CRNN (CNN + RNN + CTCLoss) for all language OCR.
MIT License
378 stars 105 forks source link

CTC 在训练几个 iter 后输出全为 0 的问题 #34

Closed BriFuture closed 4 years ago

BriFuture commented 4 years ago

你好,我用 torch.nn.CTCLoss 训练一个 cnn-rnn-ctc 网络的时候,迭代一段时间后, loss 值变小,网络预测出来的结果全部都是空白字符 0:

image

当我尝试把 lr 调小,迭代时间长了之后,网络仍然全部输出 0,这个问题的可能原因是什么呢?

Batch : N == 2 Seq : T == 9 Input Length 全部为 9 Target Length: 全部为 4

Holmeyoung commented 4 years ago
-

这个字符是被作为空白字符的,你的数据集里是不是有这个呀

BriFuture commented 4 years ago

数据集是一序列图片,应该不会包含 - 这个字符的。

标签里面存的是字符列表,一个 List,本来的序号应该是从 0 开始,我读取的时候手动加一了。

BaseDataReader.CharDict.index(c) + 1
Holmeyoung commented 4 years ago

您是用的我的git仓库吗

BriFuture commented 4 years ago

不是的,是我自己搭建的一个 cnn-rnn 网络。 我正在尝试使用你的demo,但我看网络结构似乎是一样的,但是不清楚什么原因会导致 CTCLoss 反向传播造成不收敛的情况。

Holmeyoung commented 4 years ago

编码的时候 +1 ,解码的时候注意 -1,然后blank,也就是0,会被解码为 -1,也就是数组最后一个

BriFuture commented 4 years ago

嗯好的,谢谢你,我继续尝试一下