gpt4 book ai didi

python - ctc 损失错误 - sequence_length(0) <= 3

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:20 26 4
gpt4 key购买 nike

我遇到了类似于此处所述的错误 CTC Loss InvalidArgumentError: sequence_length(b) <= time但似乎没有解释错误的实际含义。根据我所做的阅读,这是否意味着序列长度minibatch 中的示例“0”小于 3?在这种情况下,为什么它是一个错误(因为如 tf 文档和上面的问题中所解释的,所有序列的长度必须小于时间,对吗?)..任何人都可以解释一下我如何调试问题并使错误意识?我正在使用现有的 conv2d 示例并尝试使用我拥有的一些音频文件合并 ctc 损失

代码在这里https://github.com/takingstock/ServerSide-Algos/blob/master/ctc-conv.py问题出现在第 213 行(很抱歉粘贴代码 github url 而不是此处的代码..我觉得这样可能更干净)

堆栈跟踪

Caused by op u'CTCLoss', defined at:
File "conv_train.py", line 279, in <module>
loss = tf.nn.ctc_loss(Y , logits, seq_len)
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/ctc_ops.py", line 156, in ctc_loss
ignore_longer_outputs_than_inputs=ignore_longer_outputs_than_inputs)
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_ctc_ops.py", line 224, in _ctc_loss
name=name)
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 787, in _apply_op_helper
op_def=op_def)
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 3160, in create_op
op_def=op_def)
File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1625, in __init__
self._traceback = self._graph._extract_stack() # pylint: disable=protected-access

InvalidArgumentError (see above for traceback): sequence_length(0) <= 3
[[Node: CTCLoss = CTCLoss[ctc_merge_repeated=true, ignore_longer_outputs_than_inputs=false, preprocess_collapse_repeated=false, _device="/job:localhost/replica:0/task:0/device:CPU:0"](transpose, _arg_Placeholder_3_0_3, _arg_Placeholder_2_0_2, _arg_Placeholder_4_0_4)]]

最佳答案

原来错误是因为我将输入输入到 ctc_loss 函数的方式。 logits 应该是 [ max_timestep, batch_size, num_classes/labels ] 的形状,但我以相反的方式发送它。请查看下面 url 中的更新代码..希望它对某些人有用。

https://github.com/takingstock/ServerSide-Algos/blob/master/ctc_conv_corrected.py

准确地说,这是造成问题的代码部分

conv1 = conv2d(x, weights['wc1'], biases['bc1'])
# Max Pooling (down-sampling)
conv1 = maxpool2d(conv1, k=2)

# Convolution Layer
conv2 = conv2d(conv1, weights['wc2'], biases['bc2'])
# Max Pooling (down-sampling)
conv2 = maxpool2d(conv2, k=2)
# Fully connected layer
# Reshape conv2 output to fit fully connected layer input
fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]])
fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1'])
fc1 = tf.nn.relu(fc1)
# Apply Dropout
fc1 = tf.nn.dropout(fc1, dropout)

如果你注意到,池化的加入降低了需要输入到ctc_loss中的数据的维度。此外,根据我的个人经验(以及我读过的相当多的文献)池化并没有多大用处(至少在非图像卷积中没有)因此我将上面的内容替换为

x = tf.reshape(X, shape=[-1, num_features, 399 , 1])
# Convolution Layer
conv1 = conv2d(conv1, weights['wc1'], biases['bc1'], 1)
fc1 = tf.reshape(conv1, [batch_size , 399 ,
weights['wd1'].get_shape().as_list()[0]])
fc1 = tf.layers.dense( fc1, 1024 , activation=tf.nn.relu)
# Apply Dropout
fc1 = tf.nn.dropout(fc1, keep_prob)
# Output, class prediction
logits = tf.layers.dense(inputs=fc1, units=num_classes, activation=tf.nn.relu)

logits = tf.transpose(logits, (1, 0, 2))

loss = tf.nn.ctc_loss(Y , logits, seq_len)

这样,进入 ctc_loss 的输入具有所需的确切 [max_ts, batch, label] 格式。此外,仅使用一层 conv 的结果优于 BiRNN(**对于我的数据)..此外,这篇文章被证明具有巨大的直观帮助(对于将卷积与 ctc_loss 结合使用) How to use tf.nn.ctc_loss in cnn+ctc network

关于python - ctc 损失错误 - sequence_length(0) <= 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com