2017-04-14 146 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