TensorFlow中的自定义丢失功能用于加权训练数据

时间:2017-04-14 10:10:22

标签: python machine-learning tensorflow

我想根据训练数据集中的一列来加权训练数据。从而比某些人更重视某些培训项目。加权列不应作为输入图层的特征包含在内。

Tensorflow文档包含example如何使用项目标签分配自定义损失从而分配权重:

# Ensures that the loss for examples whose ground truth class is `3` is 5x
# higher than the loss for all other examples.
weight = tf.multiply(4, tf.cast(tf.equal(labels, 3), tf.float32)) + 1

onehot_labels = tf.one_hot(labels, num_classes=5)
tf.contrib.losses.softmax_cross_entropy(logits, onehot_labels, weight=weight)

我在自定义 DNN 中使用此功能,其中包含三个隐藏图层。从理论上讲,我只需要将上面例子中的标签替换为包含重量列的张量。

我知道有几个线程已经讨论过类似的问题,例如defined loss function in tensorflow?

出于某种原因,我遇到了很多问题,试图将我的重量列放入。它可能是两行简单的代码,或者可能有更简单的方法来实现相同的结果。

1 个答案:

答案 0 :(得分:1)

我相信我找到了答案:

  weight_tf = tf.range(features.get_shape()[0]-1, features.get_shape()[0])
  loss = tf.losses.softmax_cross_entropy(target, logits, weights=weight_tf)

权重是要素张量流中的最后一列。