TensorFlow - 预测下一个词 - 损失函数 logit na 目标形状
TensorFlow - predicting next word - loss function logit na target shape
我正在尝试创建一个语言模型。我有 logit
和大小目标:[32, 312, 512]
其中:
.shape[0]
是 batch_size
.shape[1]
是 sequence_max_len
.shape[2]
是 vocabulary size
问题是 - 当我将 logit
和 target
传递给损失函数时,如下所示:
self.loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(
logits=self.logit, labels=self.y))
它是否计算了当前批次的适当损失?或者我应该重塑 logit
和 target
以表达以下形状:[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)
我正在尝试创建一个语言模型。我有 logit
和大小目标:[32, 312, 512]
其中:
.shape[0]
是batch_size
.shape[1]
是sequence_max_len
.shape[2]
是vocabulary size
问题是 - 当我将 logit
和 target
传递给损失函数时,如下所示:
self.loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(
logits=self.logit, labels=self.y))
它是否计算了当前批次的适当损失?或者我应该重塑 logit
和 target
以表达以下形状:[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)