我想根据训练数据集中的一列来加权训练数据。从而比某些人更重视某些培训项目。加权列不应作为输入图层的特征包含在内。
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?
出于某种原因,我遇到了很多问题,试图将我的重量列放入。它可能是两行简单的代码,或者可能有更简单的方法来实现相同的结果。
答案 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)
权重是要素张量流中的最后一列。