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
)。硬否定是当你添加对比度值显著的候选人。通过这种方式,您可以在发行版中使用它。
- 随机均匀候选采样器
- 候选人抽样
- 采样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)