Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 克瑞斯CTC损耗输入_Tensorflow_Keras - Fatal编程技术网

Tensorflow 克瑞斯CTC损耗输入

Tensorflow 克瑞斯CTC损耗输入,tensorflow,keras,Tensorflow,Keras,我正在尝试使用CTC来使用keras进行语音识别,并尝试了CTC示例。在该示例中,CTCLambda层的输入是softmax层的输出(y_pred)。Lambda层调用ctc\u batch\u cost,该层内部调用Tensorflow的ctc\u loss,但假设ctc\u loss函数在内部执行softmax,因此您不需要首先对输入进行softmax。我认为正确的用法是将internal传递到Lambda层,这样您只能在ctc\u loss函数内部应用softmax一次。我试过这个例子,它

我正在尝试使用CTC来使用keras进行语音识别,并尝试了CTC示例。在该示例中,CTC
Lambda
层的输入是softmax层的输出(
y_pred
)。
Lambda
层调用
ctc\u batch\u cost
,该层内部调用Tensorflow的
ctc\u loss
,但假设
ctc\u loss
函数在内部执行softmax,因此您不需要首先对输入进行softmax。我认为正确的用法是将
internal
传递到
Lambda
层,这样您只能在
ctc\u loss
函数内部应用softmax一次。我试过这个例子,它是有效的。我应该遵循示例还是Tensorflow文档

您发布的代码中使用的损失与您链接的代码不同。代码中使用的损失是

keras代码在调用
ctc\u loss
之前会进行一些预处理,使其适合所需的格式。除了要求输入不为softmax-ed外,tensorflow的
ctc\u损失
还要求DIM为
NUM\u时间、批次大小、功能
。Keras的
ctc\u批量成本
实现了这两项功能

它会执行log(),从而消除softmax缩放,还可以调整DIM,使其处于正确的形状。当我说摆脱softmax缩放时,它显然不会恢复原始张量,而是
softmax(log(softmax(x))=softmax(x)
。见下文:

def softmax(x):
"""Compute softmax values for each sets of scores in x."""
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum()


x = [1,2,3]
y = softmax(x)
z = np.log(y) # z =/= x (obviously) BUT
yp = softmax(z) # yp = y #####

是的,但是
ctc\u批量成本
在内部调用tensorflow的
ctc\u损失
。你是对的。我正在探索double softmax是否会与一次性应用有所不同。你找到结论了吗?没有。我目前正在转向全张量流实现,以支持灵活性和多GPU支持。但是如果你能和我分享你的探索结果那就太好了,这很有趣。嘿,我不知道你是否还在乎,但是我更新了上面的答案,这说明他们都是对的。啊,是的,除了轴交换,我对那条线没太在意。现在清楚了。谢谢你的预言