我的openCL代码又遇到了一个非常奇怪的行为。在我的代码中,我有节点,它们使用一些增量学习规则进行更新,该规则使用高斯来确定权重。 我现在的奇怪行为是,当我只做几个更新周期时,一切似乎都运行正常,但是如果我做更多周期,我有时会开始在我的节点中获得NaN。
然而,更有趣的是,一旦我开始通过在其中放置“if(isnan(x))”来寻找NaN的原因,我就不再获得NaN了。我知道,作为一个肮脏的黑客,我可以在那里留下那个测试并希望它总能防止NaN发生,但我不喜欢那个错误的解决方案,我真的想知道那些来自哪里
我所做的只是一些产品和总和,以及一个高斯(意思是exp)。所有的首字母值绝对不是NaN,在下一个循环中只使用前面的结果。
他们可能来自哪里,或者甚至只是为什么当我试图寻找它们时它们不会出现?