gpt4 book ai didi

python - Keras 损失仅在 epoch 结束时变为 nan

转载 作者:行者123 更新时间:2023-11-30 09:45:46 26 4
gpt4 key购买 nike

我观察到 Keras 的一些奇怪行为。我正在训练一个小模型,其中训练损失仅在第一个时期结束时才变为 nan。

因此,如果我有 100 个批处理,并且我在第 99 个批处理终止训练,然后恢复另外 99 个批处理,则训练效果良好。否则,一旦到达一个纪元的末尾,它总是返回 nan。

我正在使用自定义损失函数:

def corr(x, y):
xc = x - K.mean(x)
yc = y - K.mean(y)
r_num = K.mean(xc*yc)
r_den = K.std(x)*K.std(y)
return r_num/r_den

我已经尝试了所有标准技巧,例如降低学习率、削减梯度的范数和值以及增加批量大小。只有在将批量大小增加到不切实际的情况,例如 100,000(我有 100 万个数据点)时,它实际上才会持续经过一个纪元,但我想了解最后发生了什么导致了这种奇怪的行为。我还尝试了不同的优化器(当前使用 Adam),并在不同的系统上进行了尝试,以确保这在我的一台计算机上不是问题。

我的输入和输出是一维的,我的模型总结如下。

_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_7 (InputLayer) (None, 1) 0
_________________________________________________________________
dense_7 (Dense) (None, 100) 200
_________________________________________________________________
dense_8 (Dense) (None, 100) 10100
_________________________________________________________________
dense_9 (Dense) (None, 1) 101
=================================================================
Total params: 10,401
Trainable params: 10,401
Non-trainable params: 0
_________________________________________________________________

Keras 在一个时代结束时有什么特别的吗?除了标准记录器回调之外,我找不到任何其他东西。我还编写了一个自定义回调,它每批评估我的模型并存储输出,当我随着时间的推移绘制它时,它似乎不会爆炸或做任何奇怪的事情。看起来只是在慢慢改善,然后训练就结束了。

最佳答案

可能是由损失函数中除以零引起的。通过添加一个小常数来确保分母始终为正。您可以使用 K.epsilon() 来实现此目的:

    return r_num / (r_den + K.epsilon())

关于python - Keras 损失仅在 epoch 结束时变为 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880384/

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