2016-06-12 6 views
0

私は、正のイベントの最初の3つの時間インスタンスだけがデータセットに注釈され、15回のインスタンスに耐えることができる知識を持っています。この問題に対処するために、私はネットワークを訓練するときに注釈に続く15-3 = 12の時間インスタンスから損失値を無視することに決めました。Tensorflowでネットワークをトレーニングするときの特定の入力損失を無視する

私はPythonでTensorflowを使ってLSTMネットワークをトレーニングしています。私のトレーニングバッチにはsequence_len=240があり、任意の繰り返しでシーケンスの任意の時点で発生する可能性があります。

基本的に、私のコストメトリックは、(AdamOptimizerを使用して)である

loss = tf.nn.softmax_cross_entropy_with_logits(logits, self._targets) 
cost = tf.reduce_mean(loss) 

私は単にtf.reduce_mean()に渡す前にlossから望ましくない要素を削除する必要が考えています。私はnumpyの配列という目標の仮定の下で所望のマスクを行うためのアルゴリズムを開発:

v = targets[:, 0] 
w = np.where(np.multiply(v[:-1] == 1, v[1:] < 1))[0] 
m = np.ones(v.shape, dtype=bool) 
    for i in w: 
    i1 = i + 1 
    i2 = np.min((i + 13, len(v))) 
    ind = np.arange(i1, i2, dtype=np.int) 
    m[ind] = False 
return m 

このアルゴリズムは動作しますが、ないTensorflowスコープで!明らかに、入力はテンソルであり、numpy配列ではないからです。

私の質問この小さなアルゴリズム/マスクをTensorflowに移行するにはどうすればよいですか?

答えて

0

すぐにこの質問を投稿した後、わたしは明らかな答えを思いついた。私は、ネットワーク内の「エラー重み」のプレースホルダが含まれます:

self._mask = tf.placeholder(tf.float32, [None]) 

そして、コスト関数に、私はこれらの加重損失を実行します。

loss = tf.nn.softmax_cross_entropy_with_logits(logits, self._targets) 
cost = tf.reduce_sum(tf.mul(loss, self._mask)/tf.reduce_sum(self._mask) 

次に入力データの横にマスクを生成します。これは、以前の解決策では実現できない新しいシーケンスの直前に起こったポジティブな出来事を補うことができるため、これも優れています。

+0

です。しかし、私は2日前に自分の答えを受け入れることができません。 –

関連する問題