Python Keras自定义损失范围选择-独立处理值
我的自定义损失定义如下:Python Keras自定义损失范围选择-独立处理值,python,tensorflow,keras,loss-function,Python,Tensorflow,Keras,Loss Function,我的自定义损失定义如下: def custom_mse(): def mse(y_true, y_pred): great = K.tf.greater(y_true,0.5) loss = K.square(tf.where(great, y_true, tf.zeros(tf.shape(y_true)))-tf.where(great, y_pred, tf.zeros(tf.shape(y_pred)))) loss_low = K
def custom_mse():
def mse(y_true, y_pred):
great = K.tf.greater(y_true,0.5)
loss = K.square(tf.where(great, y_true, tf.zeros(tf.shape(y_true)))-tf.where(great, y_pred, tf.zeros(tf.shape(y_pred))))
loss_low = K.square(y_true-y_pred)
return loss+loss_low
该损失是两个损失的总和,未接触预测和真实标签的MSE,以及仅在真实标签中的值大于0.5的位置上的元素MSE
这非常有效,但现在我想做一些不同的事情
我想创建一个损耗,将0.01-0.2范围内的值转换为1,以便模型得到反馈,认为这些值不正确(降低这些值的重要性更高)。从thread中,我找到了一种选择范围的方法:
lower_tensor = K.tf.greater(y_pred, 0.01)
upper_tensor = K.tf.less(y_pred, 0.2)
in_range = K.tf.logical_and(lower_tensor, upper_tensor)
然而,我找不到一种方法将这些指数应用于原始张量,所以在计算中,它将被当作一个。我想做这样的事情(只是一个例子,这行不通):
有没有办法做到这一点?或者我需要再次分割损失并将其计算在一起吗?您可以使用
tf.where
和tf.one以及您的原始张量
例如(将y_pred
设置为[0.0,0.1,0.8,0.15]
):
我们得到了
>>y\u pred\u w\u one
tf.where(in_range, y_pred) = 1
loss = K.square(y_true-y_pred)
import tensorflow as tf
y_pred = tf.constant([0.0, 0.1, 0.8, 0.15])
lower_tensor = tf.greater(y_pred, 0.01)
upper_tensor = tf.less(y_pred, 0.2)
in_range = tf.logical_and(lower_tensor, upper_tensor)
# tf.where is (cond, tensor if cond is true, tensor if cond is false)
y_pred_w_ones = tf.where(in_range, tf.ones_like(y_pred), y_pred)