gpt4 book ai didi

tensorflow - 训练神经网络 : Mathematical reason for Nan due to batch size

转载 作者:行者123 更新时间:2023-12-04 03:01:15 25 4
gpt4 key购买 nike

我正在训练 CNN。我使用谷歌预训练 inceptionV3用替换的最后一层进行分类。在训练期间,我遇到了很多问题,我的交叉熵损失变成了nan。在尝试不同的事情(降低学习率、检查数据等)后,结果是训练批量大小 太高了。

将训练批量大小从 100 减少到 60 解决了这个问题。您能否提供一个解释,为什么过大的批量大小会导致交叉熵损失函数出现此问题?还有一种方法可以解决这个问题以处理更大的批处理大小(有一篇论文建议批处理大小为 200+ 图像以获得更好的准确性)?

最佳答案

网络的较大权重(导致梯度爆炸)会在 soft max 层中产生偏斜概率。例如,[0 1 0 0 0 ] 而不是 [0.1 0.6 0.1 0.1 0.1]。因此,在交叉熵损失函数中产生数值不稳定的值。

cross_entropy = -tf.reduce_sum(y_*tf.log(y_))

当 y_ = 0 时,cross_entropy 变为无穷大(因为 0*log(0)),因此 nan

权重越来越大的主要原因是梯度爆炸问题。让我们考虑梯度更新,

Δwij = −η ∂Ei/∂wi

其中 η 是学习率,∂Ei/∂wij 是损失 w.r.t 权重的偏导数。请注意,∂Ei/∂wi 是小批量 B 的平均值。因此,梯度将取决于小批量大小 |B| 和学习率 η

为了解决这个问题,可以降低学习率。根据经验,最好将初始学习率设置为零并一次增加非常小的数字以观察损失。

此外,减小小批量会导致随机梯度更新的方差增加。这有时有助于通过向梯度更新方向添加噪声来减轻 nan

关于tensorflow - 训练神经网络 : Mathematical reason for Nan due to batch size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49044910/

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