Tensorflow负采样

发布于 2021-01-29 16:56:00

我正在尝试遵循tensorflow的udacity教程,在其中遇到了以下两行文字嵌入模型:

  # Look up embeddings for inputs.
  embed = tf.nn.embedding_lookup(embeddings, train_dataset)
  # Compute the softmax loss, using a sample of the negative labels each time.
  loss = tf.reduce_mean(tf.nn.sampled_softmax_loss(softmax_weights, softmax_biases, 
                        embed, train_labels, num_sampled, vocabulary_size))

现在,我知道第二条语句是对否定标签进行采样的。但是问题是它如何知道负面标签是什么?我提供的第二个功能是当前输入及其对应的标签以及要(负)采样的标签数量。难道没有从输入集中采样的风险吗?

这是完整的示例:https
:
//github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/5_word2vec.ipynb

关注者
0
被浏览
180
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以在tf.nn.sampled_softmax_loss()
    此处找到文档。TensorFlow此处(pdf)甚至提供了关于
    候选采样 的很好解释。


    它如何知道负面标签是什么?

    TensorFlow将在所有可能的类别(对您来说,所有可能的单词)中随机选择否定类别。

    难道没有从输入集中采样的风险吗?

    当您要计算真实标签的softmax概率时,请计算:logits[true_label] / sum(logits[negative_sampled_labels]。由于类别数量巨大(词汇量大),因此将true_label用作否定标签的可能性很小。
    无论如何,我认为TensorFlow在随机采样时完全消除了这种可能性。(编辑:@Alex确认TensorFlow默认执行此操作)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看