Tensorflow 需要张量操作的keras(tf后端)中的自定义丢失

Tensorflow 需要张量操作的keras(tf后端)中的自定义丢失,tensorflow,keras,loss-function,Tensorflow,Keras,Loss Function,我的目标是预测两个点的坐标:[x1,x2]。(2个点的y坐标是固定的)。 除了均方误差(xtrue-xpred)**2,我想最小化斜率的误差:大约(1/(x2true-x1true)-1/(x2pred-x1pred))**2 以下是我的实现,它引发了以下错误: 形状必须为秩2,但对于“concat_1”(op:“ConcatV2”)为秩1 输入形状:[?,?],[?],[]。 -- 海关损失 def combo_mse(): def组合损失(y_真,y_pred): 斜率真=1/(y真[:

我的目标是预测两个点的坐标:[x1,x2]。(2个点的y坐标是固定的)。 除了均方误差
(xtrue-xpred)**2
,我想最小化斜率的误差:大约
(1/(x2true-x1true)-1/(x2pred-x1pred))**2

以下是我的实现,它引发了以下错误:

形状必须为秩2,但对于“concat_1”(op:“ConcatV2”)为秩1
输入形状:[?,?],[?],[]。
--

海关损失
def combo_mse():
def组合损失(y_真,y_pred):
斜率真=1/(y真[:,1]-y真[:,0])
combo\u true=K.concatenate([y\u true,slope\u true])
斜率_pred=1/(y _pred[:,1]-y _pred[:,0])
combo\u pred=K.连接([y\u pred,slope\u pred])
se=K.square(组合预测-组合预测真)
损失=K.平均值(东南,轴=-1)
回波损耗
返回组合损失

如何切片输出张量
y\u true
y\u pred
,运行一些操作并使用
K.concatenate()
创建新的张量以生成新的自定义损失函数?

在连接之前,必须更改slope\u true和slope\u pred的形状。下面的代码应该可以工作。原因是你的
slope张量
是一维的,而你的
y_-true
y_-pred
张量是二维的。相同维度张量之间允许进行连接操作

def combo_mse():
        def combo_loss(y_true, y_pred):
            slope_true = 1/( y_true[:, 1] - y_true[:, 0] )
            slope_true = tf.reshape(slope_true, (-1, 1))
            combo_true = K.concatenate([y_true, slope_true])

        slope_pred = 1/( y_pred[:, 1] - y_pred[:, 0] )
        slope_pred = tf.reshape(slope_pred, (-1, 1))
        combo_pred = K.concatenate([y_pred, slope_pred])

        mse = K.square( combo_pred - combo_true)
        loss = K.mean(mse, axis=-1)
        return loss
    return combo_loss