在TensorFlow中使用sampled_softmax_loss时,我如何将某些样本分配为负样本?



sampled_softmax_loss的API如下:

tf.nn.sampled_softmax_loss(
weights,
biases,
labels,
inputs,
num_sampled,
num_classes,
num_true=1,
sampled_values=None,
...
)

我注意到argsampled_values是决定我们采取哪些阴性样本的一个,它由tf.random.fixed_unigram_candidate_sampler_candidate_sampler函数返回。

tf.random.fixed_unigram_candidate_sampler中,我们可以确定每个样本被选为负样本的概率。

如何故意将某个样本指定为负样本?

例如,在推荐系统中,我想添加一些硬否定对模型进行采样。所以我想要硬负的,不按概率_candidate_sampler函数

在TensorFlow中使用sampled_softmax_loss时,我如何将某些样本分配为负样本?

您需要了解采样器候选函数只是一个备注函数,您关于如何创建负采样器的问题是正确的。

当你分配一个unique时,你不需要创建一个负采样器。采样器为(sampled_candidates,true_expected_count,sampled_expected_count)。硬否定是当你添加对比度值显著的候选人。通过这种方式,您可以在发行版中使用它。

  1. 随机均匀候选采样器
  2. 候选人抽样
  3. 采样SoftMax

简单:只是权重和偏置不同,功能相同。

import tensorflow as tf
weights = tf.zeros([4, 1])
biases = tf.zeros([4])
labels = tf.ones([4, 1])
inputs = tf.zeros([4, 1])
num_sampled = 1
num_classes = 1
true_classes = tf.ones([4, 4], dtype=tf.int64)
num_true = 4
num_sampled = 1
unique =True
range_max = 1
sampler = tf.random.uniform_candidate_sampler(
true_classes,
num_true,
num_sampled,
unique,
range_max,
seed=None,
name=None
)
loss_fn = tf.nn.sampled_softmax_loss(
weights,
biases,
labels,
inputs,
num_sampled,
num_classes,
num_true=1,
sampled_values=sampler,
remove_accidental_hits=True,
seed=None,
name='sampled_softmax_loss'
)
print( loss_fn )

输出:以输出值为例,运行三次。

tf.Tensor([6.437752 6.437752 6.437752 6.437752], shape=(4,), dtype=float32)
tf.Tensor([6.437752 6.437752 6.437752 6.437752], shape=(4,), dtype=float32)
tf.Tensor([6.437752 6.437752 6.437752 6.437752], shape=(4,), dtype=float32)

相关内容

  • 没有找到相关文章

最新更新