2017-04-14 218 views
0

我想重量,基于在训练数据集中列的训练数据。从而比其他人更重视某些培训项目。不应将权重列作为输入图层的特征。自定义损失函数的加权训练数据

的Tensorflow文档持有example如何使用项目的标签分配一个自定义的损失,从而给予权重:在自定义DNN

# 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) 

我用这三个隐藏层。在理论上我只需要在该示例中与含有重量柱的张量替换标签上方。

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

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

+0

什么问题?您应该描述它们并包含相关的错误消息。 –

+0

我想我找到了解决方案。问题是,权重我已经创建了不匹配的功能tensorflow: ValueError异常:权重不能播到值。在dim 0. values.shape = [3] weights.shape = [120]时失配。 ValueError异常:张量( “添加:0”,形状=(120,),D型细胞= INT32)必须从相同的曲线图张量( “fully_connected/BiasAdd:0”,形状=(120,3),D型= FLOAT32)。 – Seb

回答

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) 

重量是在功能tensorflow最后一列。

+0

有没有一种方法根据交叉熵是否匹配来对它们进行不同的加权? – Nickpick