Closed fendaq closed 5 years ago
@fendaq 我在做中文识别的时候也发现了这个问题 , 目前也在找原因。 说一下我的一点目前的实验经验吧 1.首先传入attetnion decoder的initial state最好用双向rnn编码出来的state,而不要用全零的向量,后者容易导致第一次解码的结果错误 2.我觉得attetnion似乎对噪声(模糊)比较敏感,经常出现定位不准,导致遗漏,而一起训练的ctc就没有这个问题
至于你说的长度, 我发现清晰的图片一行十几个字也是可以完全识别正确的,所以我认为是噪声敏感,个人见解,经供参考
1.首先传入attetnion decoder的initial state最好用双向rnn编码出来的state,而不要用全零的向量,后者容易导致第一次解码的结果错误
enc_outputs, encoder_state= tf.nn.bidirectional_dynamic_rnn(cell_fw=cell,
cell_bw=cell,
inputs=cnn_out,
dtype=tf.float32)
...............................
initial_state = attn_cell.zero_state(BATCH_SIZE, tf.float32).clone(cell_state=encoder_state)
decoder = tf.contrib.seq2seq.BasicDecoder(
cell= attn_cell, helper=helper,
initial_state = initial_state,
output_layer=output_layer)
是这样修改吗?为什么我这边会报错,没法运行。。
Traceback (most recent call last):
File "/data/attention-ocr-toy-example/attention_model.py", line 195, in
@fendaq clone(cell_state=encoder_state[0])
enc_outputs, enc_state = tf.nn.bidirectional_dynamic_rnn(cell_fw=cell,
cell_bw=cell,
inputs=cnn_out,
dtype=tf.float32)
decoder = tf.contrib.seq2seq.BasicDecoder(cell=attn_cell, helper=helper,
initial_state=
attn_cell.zero_state(dtype=tf.float32,batch_size=batch_size).clone(cell_state=enc_state[0]),
output_layer=output_layer)
此外 訓練的時候用
train_helper = tf.contrib.seq2seq.ScheduledEmbeddingTrainingHelper(output_embed,att_train_length,
embeddings,sample_rate)
函數 具體可以參考issue #3
nmt并没有使用ScheduledEmbeddingTrainingHelper,但是可以正确预测,所以我觉得ScheduledEmbeddingTrainingHelper是非必须的。
楼主你好,我测试了一下您提供的代码,在3位数图像精度比较高,但是4位数和5位数就比较差了。 这个问题有什么好的解决办法吗?