任何人都可以解释或纠正我为什么在GPU上产生Nan Loss并在CPU上正常工作?在GPU上,第一次计算c的输出很好但是在第一次计算之后它变成了纳米并保持这种状态。
在我将生产者消费者线程放入程序之前,它正在GPU上工作。
class Consumer:
def __init__(self,maximum,sess,optimizer,cost):
self.nextTime=1
self.max=maximum
self.i=0
self.sess=sess
self.optimizer=optimizer
self.cost=cost
def run(self):
global qfeatures,finishedflag,qlabels,errorcount,epoch_loss
while (self.i<(self.max-errorcount)):
if(self.nextTime<time.clock() and not qfeatures.empty()):
if(self.i/100).is_integer():
print('remove'+str(self.i))
print(epoch_loss)
batch_x=qfeatures.get()
batch_y=qlabels.get()
#print('Removing')
batch_x=np.array(batch_x)
batch_x = batch_x.reshape((batch_size,n_chunks,chunk_size))
_, c = self.sess.run([self.optimizer, self.cost], feed_dict={x: batch_x,y: np.array(batch_y)})
if math.isnan(c):
sys.exit('nan error')
epoch_loss += c
print(epoch_loss)
self.nextTime+=(random.random()*2)/100
self.i+=1
finishedflag=1
print('finished out')
完整代码也可以在this GitHub Repository中找到。