在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

10-08 18:45