0

我的 openCL 代码又遇到了一个非常奇怪的行为。在我的代码中,我有节点,这些节点使用一些增量学习规则进行更新,该规则使用高斯来确定权重。我现在遇到的奇怪行为是,当我只执行几个更新周期时,一切似乎都可以正常工作,但是如果我执行更多周期,有时我的节点中会开始出现 NaN。

然而,更有趣的是,一旦我开始通过在其中放置“if (isnan(x))”来寻找 NaN 的原因,我就不再得到 NaN。

我知道,作为一个肮脏的黑客,我可以把那个测试留在那里,并希望它总是能防止 NaN 的发生,但我不喜欢这种错误的解决方案,我真的很想知道这些是从哪里来的。

我所做的只是一些产品和总和,以及一个高斯(意思是 exp)。所有初始值都绝对不是 NaN,并且在下一个循环中仅使用前一个的结果。

它们可能来自哪里,甚至为什么当我试图寻找它们时它们没有出现?

4

0 回答 0