TensorFlow sequence_loss with label_smoothing



是否可以将tf.losses.softmax_cross_entropy中的label_smoothing功能与tf.contrib.seq2seq.sequence_loss一起使用?

我可以看到sequence_loss可以选择将softmax_loss_function作为参数。然而,这个函数会将targets作为整数列表,而不是tf.losses.softmax_cross_entropy所需的独热编码向量,这也是 TensorFlow 中唯一支持 label_smoothing 的函数。

你能推荐一种让label_smoothing与sequence_loss一起工作的方法吗?

这不能有效地完成。

tf.contrib.seq2seq.sequence_loss 被设计为处理非常大的词汇表,因此它期望来自稀疏族的损失函数(有关详细信息,请参阅此问题(。主要区别在于标签使用序号编码而不是 one-hot,因为后者占用太多内存。从不计算实际的独热编码。

另一方面label_smoothing tf.losses.softmax_cross_entropy参数是操作独热编码的选项。以下是它的作用:

if label_smoothing > 0:
  num_classes = math_ops.cast(
      array_ops.shape(onehot_labels)[1], logits.dtype)
  smooth_positives = 1.0 - label_smoothing
  smooth_negatives = label_smoothing / num_classes
  onehot_labels = onehot_labels * smooth_positives + smooth_negatives

如您所见,要计算此张量,必须显式存储onehot_labels,这正是稀疏函数试图避免的。这就是为什么tf.nn.sparse_softmax_cross_entropy_with_logitstf.contrib.seq2seq.sequence_loss 都没有提供类似的参数。当然,您可以自己进行转换,但这会破坏整个优化。

相关内容

  • 没有找到相关文章

最新更新