openCL奇怪的NaNs事件

openCL奇怪的NaNs事件,opencl,nan,Opencl,Nan,我的openCL代码再次出现了一种非常奇怪的行为。在我的代码中,我有一些节点,这些节点使用一些增量学习规则进行更新,该规则使用高斯函数来确定权重。 我现在的奇怪行为是,当我只做几个更新周期时,一切似乎都正常工作,但是如果我做更多的周期,我有时会在我的节点中开始出现NAN 然而,更有趣的是,一旦我开始通过在其中放置一个“if(isnan(x))”来寻找南的原因,我就再也找不到南了 我知道,作为一个卑鄙的黑客,我可以把测试留在那里,并希望它能永远防止NAN的发生,但我不喜欢这种错误的解决方案,我真的

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

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

我知道,作为一个卑鄙的黑客,我可以把测试留在那里,并希望它能永远防止NAN的发生,但我不喜欢这种错误的解决方案,我真的很想知道它们来自哪里

我所做的只是一些乘积和和,还有一个高斯函数(意思是exp)。所有的初始值都不是NaN,在下一个循环中,只使用前一个循环的结果


它们可能来自何处,甚至是为什么在我试图寻找它们时它们没有出现?

您是否尝试过用if(x==x)检查它?谢谢您的快速回答。我刚刚尝试了if(x!=x)而不是isnan(x),它的行为是相同的,这意味着在测试中(即使在if的主体中,我只打印通知),如果我不这样做,我就不会得到NaNs。你能发布生成NaNs的代码吗?代码确实很有用。我找到了NaNs的源代码,高斯分布的协方差太小了。我不知道为什么测试有时(并非总是)会阻止这一点。无论如何谢谢你的帮助。