Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras自定义损失范围选择-独立处理值_Python_Tensorflow_Keras_Loss Function - Fatal编程技术网

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)