2017-04-14 15 views
0

トレーニングデータセットの列に基づいてトレーニングデータに重み付けをしたいとします。それにより、あるトレーニング項目に他のものより重要性が与えられます。重み付け列は、入力レイヤのフィーチャとして含めることはできません。トレーニングデータを重み付けするための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) 

私は3つの隠れ層を持つカスタムDNNでこれを使用しています。理論的には、上記の例のラベルを重量カラムを含むテンソルで置き換えるだけでいいです。

私は、同じ問題をすでに議論しているいくつかのスレッドがあることを認識しています。 defined loss function in tensorflow?

何らかの理由で、私は体重の列を取り込もうとして多くの問題に遭遇しています。おそらく2つの簡単なコード行か、同じ結果を得るためのより簡単な方法があります。

+0

どのような問題がありますか?それらを記述し、関連するエラーメッセージを含める必要があります。 –

+0

私は解決策を見つけたと思う。問題は、テンソルフローと一致しないウェイトを作成したことです。 ValueError:ウェイトを値にブロードキャストできません。薄暗いところで不一致。値。形= [3] weights.shape = [120]。 ValueError:Tensor( "fully_connected/BiasAdd:0"、shape =(120,3)、dtype = 0)と同じグラフからTensor( "add:0"、shape = 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

関連する問題