tf.nn.ctc_loss()函数

tf.nn.ctc_loss(
    labels,
    inputs,
    sequence_length,
    preprocess_collapse_repeated=False,
    ctc_merge_repeated=True,
    ignore_longer_outputs_than_inputs=False,
    time_major=True
)

计算CTC(连接主义时间分类)损失。

notes:

       这个类将执行softmax操作,所以输入应该是例如 LSTM对输出的线性预测。

  • inputs:num_classes:num_labels+1个类, num_labels表示真实标签的数量,空白标签保留。
  • preprocess_collapse_repeated:如果它设置为True,在丢失计算之前预处理时,传递给损失的重复标签将合并为单个标签。(强制对齐,不必要的重复)
  • ctc_merge_repeated:如果设置为False,重复的非空白标签不会被合并,会解释为单个标签。
  •  ignore_longer_outputs_than_inputs选项允许在处理输出长于输入的序列时指定CTCLoss的行为。 如果为true,则CTCLoss将仅为这些项返回零梯度,否则返回InvalidArgument错误,停止训练。

参数:

  • labels: 是一个 int32 类型的稀疏张量(SparseTensor), labels.indices[i, :] == [b, t] 表示 labels.values[i] 保存着(batch b, time t)的 id,labels.values[i] must take on values in [0, num_labels)
  • inputs: (常用变量 logits 表示)经过 RNN 后输出的标签预测值,是一个 3D 浮点 Tensor,当 time_major=True(默认)时形状为:(max_time * batch_size * num_classes),否则形状为:batch_size * max_time * num_classes,ctc_loss will perform the softmax operation for you
     
  • sequence_length: 1-D int32 vector, size 为 [batch_size],vector 中的每个值表示序列的长度,形如 [max_time_step,…,max_time_step] ,此 sequence_length 和用在 dynamic_rnn 中的 sequence_length 是一致的, 用来表示 rnn 的哪些输出不是 pad 的.
     
  • preprocess_collapse_repeated: 是否需要预处理,将重复的 label 合并成一个,默认是 False
  • ctc_merge_repeated: 默认为 True

return :

A 1-D float Tensor, size [batch], containing the negative log probabilities,同样也需要对 ctc_loss 求均值。

https://www.tensorflow.org/api_docs/python/tf/nn/ctc_loss

 

你可能感兴趣的:(tf.nn.ctc_loss()函数)