如何计算输出层多个神经元的 MSE 损失

问题描述 投票:0回答:2

我有一个前馈回归网络(在带有 TensorFlow 后端的 Keras 中),具有单个隐藏层(30 个神经元)和具有 2 个神经元的输出层(用于复杂信号的虚部和实部)...我的问题是如何计算 MSE 损失确切地 ? 因为我在每个纪元的“历史对象”中只得到一个数字。 最终我想在每个时期提取每个输出神经元的单独损失数,在 Keras 中可能吗?

tensorflow keras neural-network mse
2个回答
0
投票

计算每个批次传递的损失,然后将其平均为纪元损失,即您给出的数字。

如果您想单独计算输出神经元的损失,我认为您必须将输出层分成两部分,请参见下图进行说明。然后,您可以为两个输出分配一个损失函数,并且您将可以访问两个神经元的损失值。请注意,您必须将基本事实分成两个值,因为您现在有两个输出而不是一个。

netowrk

代码可能如下所示:

inputs = x = tf.keras.layers.Input(input_shape)
x = tf.keras.layers.Dense(30)(x)
y1 = tf.keras.layers.Dense(1)(x)
y2 = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs=inputs, outputs=[y1, y2])

loss = [tf.keras.losses.MeanSquaredError(), tf.keras.losses.MeanSquaredError()]

0
投票

当你第一次实例化它时,尝试使用损失的减少参数:

https://www.tensorflow.org/api_docs/python/tf/keras/losses/Reduction

出于您的目的,我相信您可能希望减少 None,如:

tf.keras.losses.MeanSquaredError(reduction='none')

但是,如果您想了解默认减少究竟是如何工作的,我仍在尝试弄清楚。 看起来它既没有对所有参数的单独损失求平均值,也没有求和,这是我可以肯定地告诉你的,但我没有弄清楚其他细节。

© www.soinside.com 2019 - 2024. All rights reserved.