You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确填充Softmax输出时间维度以适配CTC损失的形状要求?

问题描述

网络结构

输入序列  -> BiLSTM---------> BiLSTM --------> 带Softmax的全连接层
输出形状:    (None, 5, 256)   (None, 5, 128)      (None, 5, 11)

CTC损失计算函数

def calculate_ctc_loss(y_true, y_pred):
    batch_length = tf.cast(tf.shape(y_true)[0], dtype="int64")
    input_length = tf.cast(tf.shape(y_pred)[1], dtype="int64")
    label_length = tf.cast(tf.shape(y_true)[1], dtype="int64")
    
    input_length = input_length * tf.ones(shape=(batch_length, 1), dtype="int64")
    label_length = label_length * tf.ones(shape=(batch_length, 1), dtype="int64")
    
    loss = tf.keras.backend.ctc_batch_cost(y_true, y_pred, input_length, label_length)
    return loss

张量形状信息

总共有10个类别,批次大小为16的第一个批次中:

y_true: (16, 7)
y_pred: (16, 5, 11)

尝试填充y_pred的时间维度使其形状变为(16, 7, 11),但损失值变为nan。

核心疑问

在此场景下,如何正确填充时间维度,使y_true与y_pred的形状适配CTC损失计算?


解决方案

首先明确CTC损失的核心约束:输入序列的时间步长度(即y_pred的第二维度)必须大于等于标签序列的长度(即y_true的第二维度)。你的情况中y_pred时间步为5,小于y_true的7,这是导致填充后损失为NaN的根本原因——CTC无法在更短的输入序列上对齐更长的标签序列,强行填充会引发数值计算不稳定。

正确处理方式分为两类:

  1. 调整网络输出的时间步长度(优先推荐)
    不要用简单填充的方式,直接修改网络结构让输出时间步至少为7:

    • 可以在最后一个BiLSTM之后添加一维转置卷积层(Conv1DTranspose),将时间步从5上采样到7。例如:
      # 假设最后一个BiLSTM输出为(None,5,128)
      x = tf.keras.layers.Conv1DTranspose(filters=128, kernel_size=3, strides=1, padding="same")(x)
      # 或者用RepeatVector配合池化层扩展时间步:
      x = tf.keras.layers.RepeatVector(7)(tf.keras.layers.GlobalAveragePooling1D()(x)) # 得到(None,7,128)
      
    • 之后再接带Softmax的全连接层,输出形状变为(None,7,11),满足input_length >= label_length的要求,此时无需额外填充即可正常计算CTC损失。
  2. 若必须填充y_pred(临时方案)
    如果暂时无法修改网络结构,填充时要避免引入极端数值(比如0)导致Softmax后的概率分布出现0或1,引发NaN。应该填充均匀分布的概率值:

    # 计算需要填充的时间步长度:7-5=2
    pad_length = 7 - tf.shape(y_pred)[1]
    # 填充每个位置的概率为1/11(对应11个类别)
    pad_tensor = tf.fill((tf.shape(y_pred)[0], pad_length, 11), 1.0/11)
    # 拼接得到目标形状的y_pred
    y_pred_padded = tf.concat([y_pred, pad_tensor], axis=1)
    

    这种填充方式保证填充部分的概率分布均匀,不会破坏CTC计算的数值稳定性,同时满足时间步长度要求。


内容的提问来源于stack exchange,提问作者enterML

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:35:31