在keras ocr例子中,他们使用的是ctc损失函数。在模型编译行中,
# the loss calc occurs elsewhere, so use a dummy lambda function for the loss
model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=sgd)
他们使用一个虚拟lambda函数,其中yútrue、yúpred作为输入,yúpred作为输出但y_pred之前已经被定义为softmax激活。
y_pred = Activation('softmax', name='softmax')(inner)
如果y_pred是softmax激活,那么CTC损失在哪里使用?。y_pred是指上一层的输出,在keras中,不管它是否已经定义?(因为在代码中,层在编译行之前的输出是CTC丢失)。
最佳答案
正如评论中所说,损失计算已经在其他地方完成,因此{'ctc': lambda y_true, y_pred: y_pred}
只接受y_pred
中已预先计算的损失,并在不需要任何计算的情况下丢弃y_true
。