Keras / Tensorflow自定义丢失功能

时间:2017-03-19 13:29:07

标签: python tensorflow theano keras

我有一个用Keras建造的神经网络,我正在尝试训练。输出层有4个节点。对于我试图解决的问题,我只想根据真值计算单个输出节点上的梯度。基本上,y_true看起来像这个[0,0,2,0],其中零表示应该被忽略的节点。但是,y_pred的形式为[1.2,3.2,4.5,6]。我想这样做,只有第三个索引在mse中被考虑在内。这将要求我将y_pred中的索引0,1和3清零。我没有找到合适的方法来做到这一点。

下面是我尝试过的代码,但它从损失函数返回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对象进行这种简单的操作?

1 个答案:

答案 0 :(得分: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)