Keras / Tensorflow中的自定义CTC损失功能

时间:2019-12-25 11:47:44

标签: python tensorflow machine-learning keras ctc

我觉得我从根本上误会了一些东西。我浏览了Keras文档无济于事。我正在尝试为我的神经网络实现ctc_batch_cost损失。我的神经网络以LSTM层结束,该层将序列返回到具有4 + 1个符号softmax输出的密集层中。输出形状具有20个时间步长,如下所示:

(. . .)
_________________________________________________________________
lstm_1 (LSTM)                (None, 20, 32)            8320      
_________________________________________________________________
dense_1 (Dense)              (None, 20, 5)             165       
=================================================================

我的标签只是应该输出的可变长度字符串。

这是我尝试使用CTC的功能:

def ctc_custom(prediction_batch, label_batch):
    pred_batch_size = prediction_batch.get_shape().as_list() # returns (?,?,?) at compile time
    label_batch_size = label_batch.get_shape().as_list()
    samples = pred_batch_size[0]

    input_length = tf.placeholder([[20] for x in range(samples)])
    label_length = tf.placeholder([[len(l)] for l in label_batch_size])
    return ctc_batch_cost(label_batch, prediction_batch, input_length, label_length)

现在,当然,Tensorflow当前出现以下错误:

TypeError: 'NoneType' object cannot be interpreted as an integer

这是可以理解的,因为在编译时,变量samples将是None。但是我对如何使用它感到茫然。任何提示表示赞赏。我想了解正在发生的事情,而不仅仅是获得简单的解决方法。我尝试测试None并返回了一个占位符,但是那也不起作用,因此感觉像是黑客。

谢谢

0 个答案:

没有答案