我正在用Keras(Python,后端:TensorFlow)训练一个神经网络作为回归模型。因此,我的输出层不包含激活函数,并且我使用均方误差作为损失函数。
我的问题是:我想确保所有输出估计值之和(几乎)等于所有实际标签的总和。
我的意思是:我不仅希望每个训练样本i满足(y_real)^i ~ (y_predict)^i,还要保证对所有i求和时sum(y_real) = sum(y_predict)。常规线性回归使添加此限制变得简单,但我没有看到神经网络的类似内容。我可以通过将最终结果乘以sum(y_real) / sum(y_predict)来解决这个问题,但我担心如果我不想损害单个预测结果,这不是理想的解决方法。
我还有哪些其他选项?
(我无法分享我的数据,也无法轻松地用不同的数据重现问题,但这是请求的代码:)
我的问题是:我想确保所有输出估计值之和(几乎)等于所有实际标签的总和。
我的意思是:我不仅希望每个训练样本i满足(y_real)^i ~ (y_predict)^i,还要保证对所有i求和时sum(y_real) = sum(y_predict)。常规线性回归使添加此限制变得简单,但我没有看到神经网络的类似内容。我可以通过将最终结果乘以sum(y_real) / sum(y_predict)来解决这个问题,但我担心如果我不想损害单个预测结果,这不是理想的解决方法。
我还有哪些其他选项?
(我无法分享我的数据,也无法轻松地用不同的数据重现问题,但这是请求的代码:)
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(128, activation = 'relu', input_dim = 459))
model.add(Dense(32, activation = 'relu'))
model.add(Dense(1))
model.compile(loss = 'mean_squared_error',
optimizer = 'adam')
model.fit(X_train, Y_train, epochs = 5, validation_data = (X_val,
Y_val), batch_size = 128)