【问题标题】:TensorFlow - predicting next word - loss function logit na target shapeTensorFlow - 预测下一个单词 - 损失函数 logit na 目标形状
【发布时间】:2018-02-19 14:51:24
【问题描述】:

我正在尝试创建一个语言模型。我有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]

提前感谢您的帮助!

【问题讨论】:

    标签: tensorflow neural-network recurrent-neural-network seq language-model


    【解决方案1】:

    api 文档中提到了标签,

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

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

    【讨论】:

    • 不,您不需要 - 请参阅我的回答了解更多详细信息。
    【解决方案2】:

    答案是:无关紧要,因为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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 2016-02-19
      • 2016-07-17
      • 2016-10-06
      • 1970-01-01
      • 2021-04-05
      • 2019-06-04
      • 1970-01-01
      相关资源
      最近更新 更多