有一个使用Keras的OCR实现,它工作正常 .

我现在正试图在tensorflow中重新实现它,请参阅代码Here . 他们共享相同的模型定义:

  • 一般CNN,(输入:32 * 280 * 1,输出:1 * 35 * 512)

  • TimeDistributed Full Connected :(输入:35 * 512,输出:35 * 3000)

在训练时,使用ctc_loss . 并且他们都使用adam优化器来最小化损失(虽然看起来tensorflow和keras有不同的adam实现)

结果是keras版本的ctc_loss将减少,而tf版本将不会减少 .

  • Keras损失和优化器定义(在keras_train.py中):
def ctc_lambda_func(args):
    base_output, labels, label_length = args
    base_output_shape = tf.shape(base_output)
    sequence_length = tf.fill([base_output_shape[0],], base_output_shape[1])
    return K.ctc_batch_cost(labels, base_output, sequence_length, label_length)
loss = Lambda(ctc_lambda_func, output_shape=(1,), name='ctc')([base_output, labels, label_length])

train_model = Model(inputs=[base_input, labels, label_length], outputs=loss)
def loss_func(y_true, y_pred):
    return y_pred
train_model.compile(loss={'ctc': loss_func}, optimizer='adam', metrics=['accuracy'])
  • Tensorflow丢失和优化器定义(在tf_train.py中):
self.loss = tf.nn.ctc_loss(labels=self.labels,
                           inputs=self.logits,
                           sequence_length=self.seq_len,
                           time_major=False)
self.cost = tf.reduce_mean(self.loss)
self.optimizer = tf.train.AdamOptimizer(learning_rate=Config.LEARNING_RATE)
self.train_op = self.optimizer.minimize(self.loss, global_step=self.global_step)

我还将adam更改为不同的优化器,结果是keras版本总是减少,而tenserflow版本永远不会 .

谁能帮我吗?非常感谢 .