Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Tensorflow 如何为Keras模型编写条件自定义损失函数_Tensorflow_Deep Learning_Keras - Fatal编程技术网

Tensorflow 如何为Keras模型编写条件自定义损失函数

Tensorflow 如何为Keras模型编写条件自定义损失函数,tensorflow,deep-learning,keras,Tensorflow,Deep Learning,Keras,我正在尝试建立一个模型,可以对狗脸进行地标检测——如果有狗脸,提取眼睛和鼻子的x/y坐标,否则告诉我没有狗脸 我希望我的输出张量大小为7: 输出[0]-是否存在狗脸的概率 输出[1]/输出[2]-左眼的x/y 输出[3]/输出[4]-右眼的x/y 输出[5]/输出[6]-机头的x/y 我不知道如何编写一个自定义损失函数,该函数将如下所示: #这主要是伪代码! def自定义_l1_损失(y_真,y_pred): 如果y_true[0]==1: #有狗脸的概率=1 返回K.sum(K.abs(y

我正在尝试建立一个模型,可以对狗脸进行地标检测——如果有狗脸,提取眼睛和鼻子的x/y坐标,否则告诉我没有狗脸

我希望我的输出张量大小为7:

  • 输出[0]-是否存在狗脸的概率
  • 输出[1]/输出[2]-左眼的x/y
  • 输出[3]/输出[4]-右眼的x/y
  • 输出[5]/输出[6]-机头的x/y
我不知道如何编写一个自定义损失函数,该函数将如下所示:

#这主要是伪代码!
def自定义_l1_损失(y_真,y_pred):
如果y_true[0]==1:
#有狗脸的概率=1
返回K.sum(K.abs(y_pred[1:]-y_true[1:]),轴=-1)
其他:
#只返回狗脸出现的概率差异
返回y_true[0]-y_pred[0]

问题:是否有人有在Keras中编写类似条件损失函数的经验?

您可以提取列[0]并将其用作掩码,如以下代码所示,以便将条件损失计算简化为一行计算

def custom_l1_loss(y_true, y_pred):

    y_true_present = y_true[...,0:1]
    y_pred_present = y_pred[...,0:1]

    loss = K.sum(y_true_present*K.abs(y_pred[...,1:] - y_true[...,1:]),axis=-1)+ K.sum((1-y_true_present)*K.abs(y_true_present-y_pred_present),axis=-1)

    return loss

您可以提取列[0]并将其用作掩码,如以下代码所示,以便将条件损失计算简化为一行计算

def custom_l1_loss(y_true, y_pred):

    y_true_present = y_true[...,0:1]
    y_pred_present = y_pred[...,0:1]

    loss = K.sum(y_true_present*K.abs(y_pred[...,1:] - y_true[...,1:]),axis=-1)+ K.sum((1-y_true_present)*K.abs(y_true_present-y_pred_present),axis=-1)

    return loss

在自定义keras损失函数中,有没有其他方法可以使用if--elif--else?我在尝试时遇到以下错误。不允许将
tf.Tensor
用作Python
bool
。使用
如果t不是None:
而不是
如果t:
来测试是否定义了张量,并使用诸如tf.cond之类的TensorFlow操作来执行以张量值为条件的子图。在自定义keras损失函数中有没有其他方法可以使用if--elif--else?我在尝试时遇到以下错误。不允许将
tf.Tensor
用作Python
bool
。如果t不是None:则使用
,如果t:
则使用
来测试是否定义了张量,并使用TensorFlow操作(如tf.cond)来执行以张量值为条件的子图。