我有一个用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对象进行这种简单的操作?
答案 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)