Tensorflow 如何使用tf.nn.CTC_loss计算所有空白序列的CTC损失?

Tensorflow 如何使用tf.nn.CTC_loss计算所有空白序列的CTC损失?,tensorflow,Tensorflow,手工计算具有所有空白的序列的CTC损失是很简单的。但是,我没有找到一种方法来使用。我是否错过了什么,或者tf.nn.ctc\u loss实现缺少此功能?当批次中的几个序列没有输出符号时,此功能是必需的 ,并且它已关闭,没有应答 环境:tf版本1.3,CPU版本;python 3.5/3.6;Win10/Ubuntu 16.04 首先,我们从代码开始: import tensorflow as tf num_classes, batch_size, seq_len = 3, 1, 2 labels

手工计算具有所有空白的序列的CTC损失是很简单的。但是,我没有找到一种方法来使用。我是否错过了什么,或者
tf.nn.ctc\u loss
实现缺少此功能?当批次中的几个序列没有输出符号时,此功能是必需的

,并且它已关闭,没有应答

环境:tf版本1.3,CPU版本;python 3.5/3.6;Win10/Ubuntu 16.04

首先,我们从代码开始:

import tensorflow as tf
num_classes, batch_size, seq_len = 3, 1, 2
labels = tf.SparseTensor(indices=[[0,0]], values=[0], dense_shape=[1,1])
inputs = tf.zeros([seq_len, batch_size, num_classes])
loss = tf.nn.ctc_loss(labels, inputs, [seq_len])
print(tf.InteractiveSession().run(loss))
tf.nn.ctc_loss
的行为符合预期,并打印正确答案:1.09861231

问题一: 如何计算所有空白序列的ctc损失?tf.nn.ctc_loss API要求值
import tensorflow as tf
num_classes, batch_size, seq_len = 3, 1, 2
labels = tf.SparseTensor(indices=[[0,0]], values=[2], dense_shape=[1,1])
inputs = tf.zeros([seq_len, batch_size, num_classes])
loss = tf.nn.ctc_loss(labels, inputs, [seq_len])
print(tf.InteractiveSession().run(loss))
问题二: 让我们将序列长度更改为1,如下所示

import tensorflow as tf
num_classes, batch_size, seq_len = 3, 1, 1
labels = tf.SparseTensor(indices=[[0,0]], values=[2], dense_shape=[1,1])
inputs = tf.zeros([seq_len, batch_size, num_classes])
loss = tf.nn.ctc_loss(labels, inputs, [seq_len])
print(tf.InteractiveSession().run(loss))

然后再次运行代码。这段代码在Ubuntu中给出了正确的答案log(3),但在Win10中崩溃,并显示消息:内核死机,重新启动。

我不知道TF v1.3,但在TF v2.0中,可以使用密集张量而不是稀疏张量来计算所有空白序列的CTC丢失。在tfv1.x中有ctc_loss_v2,我相信它具有相同的行为

y_true = np.array([[0, 0, 0, 0]])
y_pred = np.zeros((1, 2, 3), np.float32)
input_length = np.array([2])
label_length = np.array([0])
cost = tf.nn.ctc_loss(y_true, y_pred, label_length, input_length)

你能用GitHub上的TensorFlow问题来解决这个问题吗?不幸的是,CTC op的bug修复目前并不是超高优先级的,但我们会看看是否能在12月份找到人来修复它。