我很难理解为什么我的自定义RMSE损失函数与MAE具有相同的值。
我有一个模型,我会使用loss ='mae'训练一次,并使用自定义函数训练一次:
def root_mean_squared_error(y_true, y_pred):
return keras.sqrt(keras.mean(keras.square(y_pred - y_true),axis=-1))
(我知道进行sqrt并没有实际好处,而只是为了掌握我所做的事情)。 我的问题是,当我使用自定义函数时,得到的输出表明损耗值等于MAE。 例如,这是示例输出:
/ 1 [==============================]-0s 173ms / step-损耗:0.0450- 均方误差:0.0091-均误差:0.0450纪元96/100 1/1 [=============================]-0s 169ms / step-损耗:0.0449- mean_squared_error:0.0091-mean_absolute_error:0.0449纪元97/100 1/1 [=============================]-0s 172ms /步-损耗:0.0448- mean_squared_error:0.0091-mean_absolute_error:0.0448纪元98/100 1/1 [=============================]-0s 166ms / step-损耗:0.0447- 均方误差:0.0091-均误差:0.0447时代99/100 1/1 [=============================]-0s 170ms / step-损耗:0.0447- mean_squared_error:0.0091-mean_absolute_error:0.0447
MAE不应与RMSE相同。 另一个奇怪的事情是我期望RMSE是sqrt(MSE),但是从上面看到的数字来看,它不是。
尽管它没有添加更多信息,但这是我的编译行:
model.compile(optimizer = Adam(lr = 1e-4), loss = root_mean_squared_error, metrics=['mse', 'mae'])
编辑: 我的训练数据和目标数据是具有1个通道的单色图像(因此张量形状为(None,256,256,1)