2017-10-19 12 views
0

Kerasでは、返された値に寄与しないようにいくつかの値をフィルタリングまたはマスクするカスタムメトリックまたは損失を計算する方法を理解しようとしています。私は、テンソルスライスを取得する方法や、if:テンソル内の値を対象にして反復する方法について固執しています。いくつかの値をフィルタリングまたはマスクするKerasカスタムメトリックを作成するにはどうすればよいですか?

私はTensorflowバックエンドを使用していますが、ポータブルなものをしたいと思います。添付

は、私が何をしようとしているの大まかな概要であるが、それはエラーがスローされます:TypeError: 'Tensor' object does not support item assignment

def my_filtered_mse(y_true, y_pred): 
     #Return Mean Squared Error for a subset of values 
     error = y_pred - y_true 
     error[y_true == 0.0] = 0 #Don't include errors when y_true is zero 
     # The previous like throws the error : TypeError: 'Tensor' object does not support item assignment 
     return K.mean(K.square(error)) 

#...other stuff ... 

    model.compile(optimizer=optimizers.adam(), 
     loss='mean_squared_error', 
     metrics=[my_filtered_mse]) 

答えて

1

障害がこのラインで起こる:

error[y_true == 0.0] = 0 #Don't include errors when y_true is zero 

errorはテンソルであるため、これはアイテムの割り当てをサポートしていません。これを次のように変更できます:

error = tf.gather(error, tf.where(tf.not_equal(y_true, 0.0))) 
関連する問題