【问题标题】:Running CTC loss function运行 CTC 损失函数
【发布时间】:2020-08-18 07:04:38
【问题描述】:

我想在莎士比亚数据集上尝试 CTC 损失函数,在计算损失期间,预测的张量形状为 (64, 100, 65),与 (64, 100) 的标签形状不匹配。所以我使用了一些数学来计算转换尺寸但出现错误。

代码

def loss(labels, logits):
  return tf.keras.losses.categorical_crossentropy(labels, logits)

example_batch_loss  = loss(labels=target_example_batch, logits=tf.math.argmax(tf.convert_to_tensor(example_batch_predictions), axis=-1, output_type=tf.int64))

错误

无法计算 Mul,因为输入 #1(从零开始)应该是一个 int64 张量,但它是一个双张量 [Op:Mul]

请帮我找到使用 CTC loss 的解决方案。

【问题讨论】:

    标签: python tensorflow machine-learning keras neural-network


    【解决方案1】:

    您正在输入模型输出的 argmax,即输出具有最高值的索引。 CTC 损失(就像大多数损失函数一样)适用于模型产生的非标准化概率分布 logits。因此,预测形状 (64, 100, 65) 和仅目标 (64, 100) 并没有错。

    但请注意,CTC 旨在处理模型输出比目标长得多的情况。典型的用例是语音识别,其中您有大量的信号窗口与相对较少的音素相匹配。如果您的输出长度和目标长度相同,则 CTC 退化为标准交叉熵。

    假设 example_batch_predictions 是您的模型输出,然​​后通过 softmax 对其进行标准化,那么您应该这样做:

    example_batch_loss  = loss(labels=target_example_batch, logits=example_batch_predictions, axis=-1, output_type=tf.int64))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2020-12-04
      • 2018-09-04
      • 1970-01-01
      相关资源
      最近更新 更多