ilovin / lstm_ctc_ocr

Use CTC + tensorflow to OCR
https://ilovin.github.io/2017-04-06/tensorflow-lstm-ctc-ocr/
354 stars 140 forks source link

关于修改为tf.nn.ctc_loss后收敛变慢的问题 #34

Closed phamhe closed 6 years ago

phamhe commented 6 years ago

作者你好: 我在bete版本的代码中的build_loss部分做了如下修改: 1、重新定义labels为稀疏张量 2、在获得labels时将labels转换为稀疏矩阵 3、使用之前获得的time_step_batch作为tf.nn.ctc_loss的seq_len输入 然后我将源代码中的warpctc替换为tf.nn.ctc_loss并成功跑通了网络,但是收敛的很慢(从read.me图片来看你跑了20k次就达到了96%的准确率,而我跑了35k次才勉强上90%,loss没下0.1,我没有修改代码中的参数所以我们参数应该是一样的,样本我也用的是直接生成在内存中的样本) 我想问一下: 1、是不是我还有遗漏的地方没有修改? 2、我收敛的慢是不是使用了不同的ctc函数引起的(tf.nn.ctc_loss与warpctc)

ilovin commented 6 years ago

如此修改,应该是没什么问题。

  1. 本来standard和warp还有一个区别,blank label不同,但是因为我代码里"NCLASSES"是直接=len+2所以应该没问题
  2. 跑出来效果有差别,二者实现上是否存在区别,我想只能看源码才能知道了,但是原理上应该是通的,都用了log。ps: 讲道理,warp只是一个并行加速的实现。

也许你可以调调参,看看能不能有所改善

phamhe commented 6 years ago

谢谢回答,我训练完后最高的ac会在96左右,我再调调参试试,再次感谢。

frankenliu commented 6 years ago

@phamhe 请问这个问题解决了吗?我这边使用TensorFlow ctc loss也出现收敛很慢的情况,不知道替换warpctc能否有效?