gpt4 book ai didi

python - 为什么在训练 Keras 模型时将损失乘以标量会得到不同的结果?

转载 作者:行者123 更新时间:2023-11-30 09:17:32 25 4
gpt4 key购买 nike

我会展示我的模型,但我已经全面看到了这个结果。举个例子,我现在正在训练一个模型,使用直接 mse,损失降到最低点 0.0160。但当我使用 100 * mse 时,损失现在已降至 0.2 以下,而我原本预计损失会在 1.6 左右触底。有人知道为什么训练 Keras 模型可能对损失乘以标量敏感吗?

编辑:只是为了澄清,当这种情况发生在我身上时,模型最终确实做得更好,所以这不仅仅是一个数字怪癖。

EDIT2:我被要求提供一些示例代码,所以我会的。我正在使用卷积变分自动编码器作为生成模型。这是我的自定义损失函数:

def vae_loss (input_image, decoder_output):
mse_loss = mse(input_image, decoder_output)
kl_loss = - 0.5 * (K.mean(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var), axis=[-1,-2,-3]))
return mse_loss # (A)
#return 100 * mse_loss # (B)

我意识到这没有使用kl_loss,这只是一个实验。我正在编译模型:

vae.compile(optimizer='adadelta', loss=vae_loss)

并拟合:

vae.fit_generator(random_crop(data[:500,:,:,:], 128, 128),
validation_data=random_crop(data[500:,:,:,:], 128, 128),
shuffle=True, steps_per_epoch=64, epochs=5, validation_steps=50)

使用 A 作为损失函数,损失函数收敛到 0.0160。如果使用 B 导致模型收敛到相同的解决方案(我希望它会这样,因为乘以标量不会改变局部最小值的位置),我希望它收敛到损失为 1.60,是 A 的 100 倍。但事实并非如此。事实上,无论是在损失方面还是在网络的定性产品方面,B 都明显优于 A

最佳答案

我猜这与 Keras 判断网络收敛的方式有关 - 它可能将损失函数之间的差异与固定数字进行比较,例如 0.01。如果它不能提高 0.01,它就会停止。

如果将损失乘以 100,Keras 仍使用 0.01 来测试收敛性 - 因此它会执行更多迭代并优化得更好。

关于python - 为什么在训练 Keras 模型时将损失乘以标量会得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51277247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com