首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorFlow sequence_loss和label_smoothing

TensorFlow sequence_loss和label_smoothing
EN

Stack Overflow用户
提问于 2018-03-06 17:14:43
回答 1查看 2.1K关注 0票数 2

是否可以在label_smoothing中使用来自tf.losses.softmax_cross_entropytf.contrib.seq2seq.sequence_loss特性?

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

您能推荐一种使label_smoothing与sequence_loss协同工作的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 19:01:34

这是不可能有效完成的。

tf.contrib.seq2seq.sequence_loss被设计用于处理非常大的词汇表,因此它希望从稀疏家族中获得一个丢失函数(详见this question )。主要的区别是标签使用序号编码,而不是单一热编码,因为后者占用了太多的内存。实际的一次热编码是,从未计算过.

另一方面,label_smoothing参数tf.losses.softmax_cross_entropy是一个操作单一热编码的选项.它的作用如下:

代码语言:javascript
复制
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都没有提供类似的参数。当然,您可以自己进行转换,但这会破坏整个优化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49136472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档