了解tensorflow序列的损耗参数

了解tensorflow序列的损耗参数,tensorflow,Tensorflow,sequence\u Loss模块有三个必需的参数,它们将它们列为输出、目标和权重 输出和目标是不言自明的,但我希望更好地理解权重参数是什么 另一件让我感到困惑的事情是,它指出目标应该与输出的长度相同,它们所指的张量的长度究竟是什么?特别是如果它是一个三维张量 我们在课堂上使用了它,我们的教授说,我们可以只传递正确形状的(注释中说“1D批量大小的浮点张量列表,长度与logits相同”)。这对它们的意思没有帮助,但可能会帮助您运行代码。为我工作 这段代码应该可以做到这一点:[tf.ones(bat

sequence\u Loss
模块有三个必需的参数,它们将它们列为输出、目标和权重

输出和目标是不言自明的,但我希望更好地理解
权重
参数是什么


另一件让我感到困惑的事情是,它指出
目标
应该与输出的
长度
相同,它们所指的张量的长度究竟是什么?特别是如果它是一个三维张量

我们在课堂上使用了它,我们的教授说,我们可以只传递正确形状的(注释中说“1D批量大小的浮点张量列表,长度与logits相同”)。这对它们的意思没有帮助,但可能会帮助您运行代码。为我工作

这段代码应该可以做到这一点:
[tf.ones(batch\u size,tf.float32)用于u-in-logits]

编辑:从TF代码:

for logit, target, weight in zip(logits, targets, weights):
      if softmax_loss_function is None:
        # TODO(irving,ebrevdo): This reshape is needed because
        # sequence_loss_by_example is called with scalars sometimes, which
        # violates our general scalar strictness policy.
        target = array_ops.reshape(target, [-1])
        crossent = nn_ops.sparse_softmax_cross_entropy_with_logits(
            logit, target)
      else:
        crossent = softmax_loss_function(logit, target)
      log_perp_list.append(crossent * weight)

传递的权重乘以该特定logit的损失。因此,我想如果你想特别认真地对待某个预测,你可以将权重增加到1以上。

将权重视为应用于输入张量的掩码。在某些NLP应用程序中,每个句子的句子长度通常不同。为了将多个实例语句并行/批处理成一个小批量输入到神经网络中,人们使用掩码矩阵来表示输入张量中的哪个元素实际上是有效的输入。例如,权重可以是a
np.one([batch,max_length])
,这意味着所有输入元素都是合法的

我们也可以使用与标签形状相同的矩阵,例如
np.asarray([[1,1,1,0],[1,1,0,0],[1,1,1,1]])
(我们假设标签形状为3x4),那么第一行最后一列的交叉熵将被屏蔽为0


您还可以使用权重来计算交叉熵的加权累积

这有一点帮助,但我试图更多地了解权重参数的用途,我没有在RNN的损失函数中找到很多关于权重的讨论,除非我们讨论的是输出层。你知道关于长度的正确形状问题的答案吗?我猜你是在谈论代码中的注释吧<代码>权重:与logits长度相同的1D批量大小的浮点张量列表。
您对该注释有疑问吗?应该就是这个。@TheM00s3我更新了我的答案(见最后一句)。@TheM00s3我找到了使用权重的代码,也许这很有帮助。