在训练神经网络时,给定一组训练样本,我们希望根据不同样本的“价值”(例如有效性或置信度)来调整其在训练中的权重。我们为每个样本分配一个介于0.0到1.0之间的权重。如何在Tensorflow中实现这一点,特别是在使用tf.nn.sparse_softmax_cross_entropy_with_logits()
时?
回答:
在最常见的情况下,当你调用tf.nn.sparse_softmax_cross_entropy_with_logits
时,logits
的形状为[batch_size, num_classes]
,labels
的形状为[batch_size]
,该函数返回一个形状为batch_size
的张量。你可以在将这些张量归约为单一损失值之前,将其与一个权重张量相乘:
weights = tf.placeholder(name="loss_weights", shape=[None], dtype=tf.float32)loss_per_example = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels)loss = tf.reduce_mean(weights * loss_per_example)