计算并返回 noise-contrastive 估计训练损失。
用法
tf.nn.nce_loss(
weights, biases, labels, inputs, num_sampled, num_classes, num_true=1,
sampled_values=None, remove_accidental_hits=False, name='nce_loss'
)
参数
-
weights
形状为[num_classes, dim]
的Tensor
或Tensor
对象的列表,其沿维度 0 的连接具有形状 [num_classes, dim]。 (possibly-partitioned) 类嵌入。 -
biases
形状为[num_classes]
的Tensor
。阶级偏见。 -
labels
类型为int64
和形状为[batch_size, num_true]
的Tensor
。目标类。 -
inputs
形状为[batch_size, dim]
的Tensor
。输入网络的前向激活。 -
num_sampled
一个int
。每批随机抽样的负类数量。为批次中的每个元素评估这个负类的单个样本。 -
num_classes
一个int
。可能的类数。 -
num_true
一个int
。每个训练示例的目标类数。 -
sampled_values
*_candidate_sampler
函数返回的 (sampled_candidates
,true_expected_count
,sampled_expected_count
) 元组。 (如果没有,我们默认为log_uniform_candidate_sampler
) -
remove_accidental_hits
Abool
.是否删除"accidental hits",其中采样类等于目标类之一。如果设置为True
,这是 "Sampled Logistic" 损失而不是 NCE,我们正在学习生成 log-odds 而不是日志概率。查看我们的候选抽样算法参考.默认为假。 -
name
操作的名称(可选)。
返回
-
per-example NCE 损失的
batch_size
一维张量。
请参阅Noise-contrastive 估计:非标准化统计模型的新估计原理。另请参阅我们的候选采样算法参考
一个常见的用例是使用此方法进行训练,并计算完整的 sigmoid 损失以进行评估或推理,如下例所示:
if mode == "train":
loss = tf.nn.nce_loss(
weights=weights,
biases=biases,
labels=labels,
inputs=inputs,
...)
elif mode == "eval":
logits = tf.matmul(inputs, tf.transpose(weights))
logits = tf.nn.bias_add(logits, biases)
labels_one_hot = tf.one_hot(labels, n_classes)
loss = tf.nn.sigmoid_cross_entropy_with_logits(
labels=labels_one_hot,
logits=logits)
loss = tf.reduce_sum(loss, axis=1)
注意:在 weights
和 bias
上进行嵌入查找时,将使用 "div" 分区策略。稍后将添加对其他分区策略的支持。
注意:默认情况下,这使用 log-uniform (Zipfian) 分布进行采样,因此您的标签必须按照频率递减的顺序进行排序才能获得良好的结果。有关详细信息,请参阅 tf.random.log_uniform_candidate_sampler
。
注意:在 num_true
> 1 的情况下,我们为每个目标类别分配目标概率 1 /num_true
,以便目标概率总和为 1 per-example。
注意:每个示例允许可变数量的目标类将很有用。我们希望在未来的版本中提供此函数。现在,如果您有可变数量的目标类,您可以通过重复它们或使用其他未使用的类填充它们来将它们填充为一个常量。
相关用法
- Python tf.nn.embedding_lookup_sparse用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.set_weights用法及代码示例
- Python tf.nn.dropout用法及代码示例
- Python tf.nn.gelu用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper.set_weights用法及代码示例
- Python tf.nn.embedding_lookup用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper.get_weights用法及代码示例
- Python tf.nn.local_response_normalization用法及代码示例
- Python tf.nn.scale_regularization_loss用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.add_loss用法及代码示例
- Python tf.nn.max_pool用法及代码示例
- Python tf.nn.RNNCellDropoutWrapper.set_weights用法及代码示例
- Python tf.nn.l2_loss用法及代码示例
- Python tf.nn.log_softmax用法及代码示例
- Python tf.nn.weighted_cross_entropy_with_logits用法及代码示例
- Python tf.nn.ctc_greedy_decoder用法及代码示例
- Python tf.nn.dilation2d用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.get_weights用法及代码示例
- Python tf.nn.compute_average_loss用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.nn.nce_loss。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。