Python Keras损失似乎是错误的——加权总和是错误的

Python Keras损失似乎是错误的——加权总和是错误的,python,tensorflow,keras,Python,Tensorflow,Keras,我使用Keras和tensorflow后端来训练一个具有多个输出但只有一个损失的模型(输出层“部件”上的MSE)。其定义如下: model = Model(inputs=[image, year], outputs=outputs) # outputs is a list of 8 output layers model_parallel = keras.utils.multi_gpu_model(model, gpus=2, cpu_merge=True, cpu_relocation=Fal

我使用Keras和tensorflow后端来训练一个具有多个输出但只有一个损失的模型(输出层“部件”上的MSE)。其定义如下:

model = Model(inputs=[image, year], outputs=outputs) # outputs is a list of 8 output layers
model_parallel = keras.utils.multi_gpu_model(model, gpus=2, cpu_merge=True, cpu_relocation=False)
losses = {'parts': keras.losses.mean_squared_error}
loss_weights = {'parts': 1.}
model_parallel.compile(loss=losses,
                       loss_weights=loss_weights,
                       optimizer=keras.optimizers.RMSprop(lr=args.lr)
                       )
model_parallel.fit_generator(generator=generator_training,
                             epochs=args.epochs,
                             verbose=1
                             )
fit_generator打印总损耗和我的零件损耗:

33/5730 [..............................] - ETA: 14:28:59 - loss: 117.6318 - parts_loss: 97.1686

为什么总损失(=所有损失的加权和)不同于部分损失?

总损失不同于部分损失,因为它包括正则化项。换句话说,
loss
计算为
loss=parts_loss+k*R
,其中
R
是正则化项(通常是模型权重的L1或L2范数)和
k
是控制正则化损失在总损失中的贡献的超参数。

是否使用正则化?是的,就是这样。非常感谢。太好了,我会发布一个答案:)