有一个使用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版本永远不会 .
谁能帮我吗?非常感谢 .