Multithreading 从GPU运行并使用多个线程为队列提供数据时tensorflow中的NaN值
我在训练的模型中遇到了NaN值 我有两个tensorflow队列。第一个线程由一个独立的加载线程提供,第二个线程从第一个队列读取数据,执行预处理,然后加载到第二个队列中 这一切都发生在CPU上。然后,模型从第二个队列中读取一批数据,并在GPU上进行训练 我在一个可变的步骤后得到NaN,通常在10-20的数量级 我可以通过两种方式回避问题:Multithreading 从GPU运行并使用多个线程为队列提供数据时tensorflow中的NaN值,multithreading,tensorflow,gpu,Multithreading,Tensorflow,Gpu,我在训练的模型中遇到了NaN值 我有两个tensorflow队列。第一个线程由一个独立的加载线程提供,第二个线程从第一个队列读取数据,执行预处理,然后加载到第二个队列中 这一切都发生在CPU上。然后,模型从第二个队列中读取一批数据,并在GPU上进行训练 我在一个可变的步骤后得到NaN,通常在10-20的数量级 我可以通过两种方式回避问题: 在CPU上运行。同样的代码在CPU上运行良好 删除线程,使用相同的代码,而不是在线程中运行加载程序和预处理器,只需在训练步骤之前按顺序执行这两个步骤 因此,只
我在两个系统上复制了这一点,一个运行TF1.0.1,另一个运行1.1.0-rc1。我尝试了CUDNN 5和CUDNN 6库。这个问题似乎与GPU上定义了一些
tf.image
处理函数有关,但从CPU上的队列向它们提供数据。我没有料到这会是一个问题,但当我将这些操作绑定到CPU时,一切都很好。我仍然没有在有限的测试用例中成功地重现这个问题,但似乎我已经将一些图像预处理操作附加到GPU上,但我是从基于CPU的队列中输入它们的。这并没有导致失败,但我得到了奇怪的数值不稳定性,并最终得到了NaN。我可以解决上面提到的问题,在GPU上运行,没有线程/队列,完全在CPU上运行,或者我的最终解决方案:使用带有设备('/CPU:0')的将图像处理操作固定到CPU上: