Keras值错误中的自定义损失函数

时间:2020-02-28 21:37:51

标签: python keras

我正在尝试预测4个变量,但我真正关心的是变量与任何特定变量之和。考虑到这一点,我将模型定义为:

import keras.backend as K
from keras import losses

def baseline_model():
    def loss_function(y_actual, y_predict):
        return losses.mean_squared_error(
            K.sum(y_actual), 
            K.sum(y_predict)
        )

    model = Sequential()
    model.add(Dense(60, input_dim=40, kernel_initializer='normal', activation='relu'))
    model.add(Dense(30, kernel_initializer='normal', activation='relu'))
    model.add(Dense(5, kernel_initializer='normal'))
    model.compile(loss=loss_function, optimizer='adam')

    return model

在我要返回总和的均方误差的地方。我收到一个错误消息:

ValueError: Invalid reduction dimension -1 for input with 0 dimensions. for 'loss_10/dense_33_loss/loss_function/Mean' (op: 'Mean') with input shapes: [], [] and with computed input tensors: input[1] = <-1>.

有什么主意,我如何才能正确地做到这一点,或者哪里出了问题?

1 个答案:

答案 0 :(得分:0)

K.sum默认情况下减小输入张量的秩,并且默认情况下计算所有轴上的总和。这两个默认值的组合导致出现问题。您需要做的就是为每次使用keepdims=True设置K.sum,或者设置axis=1(或您要求和的轴)。

def loss_function(y_actual, y_predict):
        return losses.mean_squared_error(
            K.sum(y_actual,keepdims=True), 
            K.sum(y_predict,keepdims=True)
        )

def loss_function(y_actual, y_predict):
        return losses.mean_squared_error(
            K.sum(y_actual,axis=1), 
            K.sum(y_predict,axis=1)
        )

两者都应该编译良好。不过,您可能需要keepdims版本。