2017-03-19 6 views
0

私は訓練しようとしているケラスで神経回路網を構築しています。出力層には4つのノードがあります。私が解決しようとしている問題については、真の値に基づいて出力ノードの1つの勾配を計算したいだけです。基本的に、y_trueは[0,0,2,0]のようになります。ここで、ゼロは無視すべきノードを表します。しかし、y_predは[1.2,3.2,4.5,6]という形式になります。私は、3番目の指標だけがmseで考慮されるようにしたいと思います。これには、y_predのインデックス0,1,3をゼロにする必要があります。私はこれを行う適切な方法を発見していない。Keras/Tensorflowカスタムロス機能

以下は試したコードですが、損失関数からNaNを返します。

def custom_mse(y_true, y_pred): 

    return K.mean(K.square(tf.truediv(y_pred*y_true,y_true)-y_pred), axis=-1) 

これらのTensorオブジェクトでこの簡単な操作を行う方法はありますか?

答えて

3

このようにそれをやって:

[1.2,3.2,4.5,6]*[0,0,2,0] = [0,0,9,0] 
[0,0,9,0]/2 = [0,0,4.5,0] 

、その後は正常に継続します。

これはそれを行うためのコードです:

def custom_mse(y_true, y_pred): 
    return K.mean(K.square(tf.divide(tf.multiply(y_pred, y_true),tf.reduce_max(y_true))-y_true), axis=-1)