TensorFlow - 预测下一个词 - 损失函数 logit na 目标形状

TensorFlow - predicting next word - loss function logit na target shape

我正在尝试创建一个语言模型。我有 logit 和大小目标:[32, 312, 512]

其中:

问题是 - 当我将 logittarget 传递给损失函数时,如下所示:

self.loss = tf.reduce_mean(
        tf.nn.softmax_cross_entropy_with_logits(
                                          logits=self.logit, labels=self.y))

它是否计算了当前批次的适当损失?或者我应该重塑 logittarget 以表达以下形状:[32, 312*512]?

在此先感谢您的帮助!

api 文档说明了标签,

labels: Each row labels[i] must be a valid probability distribution

如果您一次预测每个字符,您将有一个概率分布(每个字符总和为 1 的概率)超过您的词汇量 512。鉴于此,您的标签和未缩放的 logits 形状 [32 , 312, 512],在调用该函数之前,您应该将其整形为 [32*312, 512]。这样你的标签的每一行都有一个有效的概率分布,你的未缩放的logits将被函数本身转换为概率分布,然后计算损失。

答案是:无关,因为tf.nn.softmax_cross_entropy_with_logits()dim参数:

dim: The class dimension. Defaulted to -1 which is the last dimension.
name: A name for the operation (optional).

也在 tf.nn.softmax_cross_entropy_with_logits() 中,您有此代码:

# Make precise_logits and labels into matrices.
precise_logits = _flatten_outer_dims(precise_logits)
labels = _flatten_outer_dims(labels)