我正在尝试预测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>.
有什么主意,我如何才能正确地做到这一点,或者哪里出了问题?
答案 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
版本。