Python 在Keras中编写没有y_true的自定义损失函数

Python 在Keras中编写没有y_true的自定义损失函数,python,keras,Python,Keras,我正在Keras中实现一个三重态损耗函数。一般来说,损失函数以具有基本真值的预测值为参数。但三重态丢失不使用标签,只使用输出。我尝试只使用一个参数编写函数: def triplet_loss(y_pred): margin = 1 return K.mean(K.square(y_pred[0]) - K.square(y_pred[1]) + margin) 说triplet\u loss()接受1个参数失败,但给出了两个参数(在score\u array=fn(y\u tr

我正在Keras中实现一个三重态损耗函数。一般来说,损失函数以具有基本真值的预测值为参数。但三重态丢失不使用标签,只使用输出。我尝试只使用一个参数编写函数:

def triplet_loss(y_pred):
    margin = 1
    return K.mean(K.square(y_pred[0]) - K.square(y_pred[1]) + margin)

triplet\u loss()
接受1个参数失败,但给出了两个参数(在
score\u array=fn(y\u true,y\u pred)中)
。当我用两个参数编写函数时,
y\u-true,y\u-pred
,程序运行没有错误。这是为什么?我应该用这两个参数来实现这个函数,尽管
y\u-true
不会被使用吗?这是正确的还是有其他方法呢?

好吧……不要使用基本事实:

def triplet_loss(y_true,y_pred):
    #all your code as it is.
在没有基本事实的情况下训练人际网络是不常见的。当我们期望它学习一些东西时,通常会有一个基本事实。如果你不这样做,干脆忽略它


另外,如果忽略了
y\u true
,那么传递给fit方法的是什么?只是一个虚拟数组?

通过K.function方法实现它

output_tensor = your_model(input_tensor)
total_loss = K.mean( K.abs (input_tensor - output_tensor) )

nn_train = K.function ([input_tensor],[total_loss], 
                Adam(lr=5e-5, beta_1=0.5, beta_2=0.999).get_updates(total_loss, your_model.trainable_weights)

loss, = nn_train ([input])

我还没有解决它,我只是在尝试处理它。我想知道这是否是TF2.3现在推出的最佳解决方案?@sachinruk,可以使用
模型。添加损耗(一些计算的张量)
,并可能使用
损耗=无
进行编译。