【问题标题】:Keras MSE Loss with Two Outputs具有两个输出的 Keras MSE 损失
【发布时间】:2021-02-02 14:59:49
【问题描述】:

我有一个模型,它的输出层是Dense(2),所以我的输出是一个包含 2 个浮点数的列表。

我在Keras documentation上找到了一个类似的例子

>>> y_true = [[0., 1.], [0., 0.]]
>>> y_pred = [[1., 1.], [1., 0.]]
>>> # Using 'auto'/'sum_over_batch_size' reduction type.  
>>> mse = tf.keras.losses.MeanSquaredError()
>>> mse(y_true, y_pred).numpy()
0.5

根据示例的输出,我认为它会像这样计算 MSE

first_MSE = mse(y_true[0], y_pred[0])
second_MSE = mse(y_true[1], y_pred[1])
mse = (first_MSE + second_MSE) / 2

按照上面的例子,我得到 0.5。幕后真的是这样吗?

【问题讨论】:

  • 拥有Dense(2) 并不意味着你有两个输出。您有一个形状为 (2,) 的输出
  • @Frightera 你说得对,我改了。

标签: python keras


【解决方案1】:

是的,MeanSquaredError 首先计算为最后一个轴的平均值,然后是批次的平均值。

这里计算平方差的最后一个轴的平均值: https://github.com/tensorflow/tensorflow/blob/7ec285825c713af9bc741b8b65d09dd160ec8806/tensorflow/python/keras/losses.py#L1213

MeanSquaredError 类使用默认减少,这意味着批次损失,这里: https://github.com/tensorflow/tensorflow/blob/7ec285825c713af9bc741b8b65d09dd160ec8806/tensorflow/python/keras/utils/losses_utils.py#L264

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2020-02-29
    • 2019-07-06
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多