0

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

在哪里:

  • .shape[0]batch_size
  • .shape[1]sequence_max_len
  • .shape[2]vocabulary size

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

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

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

在此先感谢您的帮助!

4

2 回答 2

1

api文档说标签,

标签:每一行标签[i]必须是一个有效的概率分布

如果您一次预测每个字符,您将在词汇大小 512 上获得概率分布(每个字符总和为 1 的概率)。鉴于此,您的标签和未缩放的形状为 [32、312、512] ,您应该在调用函数之前将其重塑为 [32*312, 512] 。这样,您的标签的每一行都有一个有效的概率分布,并且您的未缩放 logit 将由函数本身转换为概率分布,然后将计算损失。

于 2018-02-19T21:57:49.143 回答
0

答案是:这无关紧要,因为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)
于 2018-02-22T15:44:58.530 回答