2017-10-26 9 views
0

model_fn()の3つの学習目標(これらのタスクA、タスクB、およびタスクCを考慮)を持つGCMLE実験があります。 3つの目的すべての入力は同じです(テキストの本文を読む)。私は3つの別々の予測を生成したいと思います。しかし、タスクCでは、バッチ内のいくつかの サンプルを適切にマスクしたい(各バッチの〜20%)。私がゼロでマスクしたいサンプルを単純に重み付けすることでこれを行う適切な方法はありますか?基本的に私は何をしようとしていますが、バッチ内の任意のサンプルをマスク..ですTensorflowの損失関数のマスクサンプル

lossA = tf.reduce_mean(tf.losses.sparse_softmax_cross_entropy(
      labels=labelsA, logits=logitsA)) 

lossB = tf.reduce_mean(tf.losses.sparse_softmax_cross_entropy(
      labels=labelsB, logits=logitsB)) 

mask_weights = tf.to_float(tf.equal(x, y)) # returns 1 if x equals y, returns 0 if x != y 
lossC = tf.reduce_mean(tf.losses.sparse_softmax_cross_entropy(
      labels=labelsC, logits=logitsC, weights=mask_weights)) 

loss = lossA + lossB + lossC 

をこの損失関数を考えてみましょう。ここで、x!= yの彼らはに関連して、これらの実施例に基づいたモデルへの勾配の更新はありませんようにタスクC。これは希望の効果の近くにありますか?望ましい動作を実装するためのより良い方法はありますか?

これらを別々の実験に分けることができますが、GCMLE予測サービスにアップロードできる共有埋め込みと1つのグラフを持たせたいと思います。

+0

私は3つのタスクを組み合わせることをお勧めしません。私はあなたがすべてのタスクが同時に最適化されると仮定していると思います。しかし、losscは、損失aの正規化用語のように機能します。だから、あなたは妥当な損失を被る可能性が最も高い損失cを得るでしょう。 – Lak

+0

@LakLakshmananは応答に感謝します!私は実際にこの正則化が私が実験しようとしている意図された行動だと思っています。私はこのblogpostに触発されました:http://ruder.io/multi-task-learning-nlp/補助的な仕事を紹介し、一緒に訓練したいと思います。この文脈を前提に、これをTFで実装することをお勧めする別の方法はありますか? Kerasにはマルチタスク学習が組み込まれていることがわかります。https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-modelsそして私は良い結果を見ましたTFと複製するのが好きです。 – reese0106

+0

@LakLakshmanan私は損失を組み合わせる方法にかかわらず、lossCのゼロの重みを渡すと、効果的にこれらのサンプルがマスクされて勾配が更新されるか、カスタム損失関数内でサンプルをマスクする別の方法を提案しますか? – reese0106

答えて

0

コメントを要約する - ポストに記載されているように、損失関数にバイナリマスクを適用することは、損失関数をマスクするのに適しているようです。しかしながら、Cの効果的なバッチサイズを減少させることにより、このアプローチを妨げる他の意図しない結果が存在する可能性がある。

関連する問題