溢出错误:(PyTorch中的34,';数值结果超出范围';)

溢出错误:(PyTorch中的34,';数值结果超出范围';),pytorch,Pytorch,当我在不同的GPU(特斯拉K-20,cuda 7.5已安装,6GB内存)中运行代码时,出现以下错误(请参阅stacktrace)。如果我在GeForce 1080或Titan X GPU中运行,代码工作正常 堆栈跟踪: File "code/source/main.py", line 68, in <module> train.train_epochs(train_batches, dev_batches, args.epochs) File "/gpfs/home/g/

当我在不同的GPU(特斯拉K-20,cuda 7.5已安装,6GB内存)中运行代码时,出现以下错误(请参阅stacktrace)。如果我在GeForce 1080或Titan X GPU中运行,代码工作正常

堆栈跟踪

File "code/source/main.py", line 68, in <module>
    train.train_epochs(train_batches, dev_batches, args.epochs)
  File "/gpfs/home/g/e/geniiexe/BigRed2/code/source/train.py", line 34, in train_epochs
    losses = self.train(train_batches, dev_batches, (epoch + 1))
  File "/gpfs/home/g/e/geniiexe/BigRed2/code/source/train.py", line 76, in train
    self.optimizer.step()
  File "/gpfs/home/g/e/geniiexe/BigRed2/anaconda3/lib/python3.5/site-packages/torch/optim/adam.py", line 70, in step
    bias_correction1 = 1 - beta1 ** state['step']
OverflowError: (34, 'Numerical result out of range')
文件“code/source/main.py”,第68行,在
列车运行时间(列车运行时间、开发时间、参数运行时间)
文件“/gpfs/home/g/e/geniexe/BigRed2/code/source/train.py”,第34行,火车时代
损失=自列(列批次、开发批次(历元+1))
文件“/gpfs/home/g/e/geniexe/BigRed2/code/source/train.py”,第76行,列车中
self.optimizer.step()
文件“/gpfs/home/g/e/geniexe/BigRed2/anaconda3/lib/python3.5/site packages/torch/optim/adam.py”,第70行,步骤
偏差校正1=1-β**状态['step']
溢出错误:(34,‘数值结果超出范围’)

那么,当它在GeForce或Titan X GPU中工作正常时,在不同的GPU(特斯拉K-20)中出现这种错误的原因是什么?此外,错误意味着什么?它是否与内存溢出有关,我不这么认为。

discussion.pytorch.org
中建议的一种解决方法如下

替换
adam.py
中的以下行:-

bias_correction1 = 1 - beta1 ** state['step']
bias_correction2 = 1 - beta2 ** state['step']


discussion.pytorch.org
中建议的一种解决方法如下

替换
adam.py
中的以下行:-

bias_correction1 = 1 - beta1 ** state['step']
bias_correction2 = 1 - beta2 ** state['step']


如果有人像我一样来到这里,寻找相同的错误,但CPU使用scikit learn的MLPClassizer,那么上述修复恰好是修复sklearn代码的一个足够好的提示

解决办法是: 在文件…/site packages/sklearn/neural_network/_random_optimizers.py中

更改此项:

self.learning_rate = (self.learning_rate_init *
                      np.sqrt(1 - self.beta_2 ** self.t) /
                      (1 - self.beta_1 ** self.t))
为此:

orig_self_t = self.t
new_self_t = min(orig_self_t, 1022)
self.learning_rate = (self.learning_rate_init *
                          np.sqrt(1 - self.beta_2 ** new_self_t) /
                          (1 - self.beta_1 ** new_self_t))

如果有人像我一样来到这里,寻找相同的错误,但CPU使用scikit learn的MLPClassizer,那么上述修复恰好是修复sklearn代码的一个足够好的提示

解决办法是: 在文件…/site packages/sklearn/neural_network/_random_optimizers.py中

更改此项:

self.learning_rate = (self.learning_rate_init *
                      np.sqrt(1 - self.beta_2 ** self.t) /
                      (1 - self.beta_1 ** self.t))
为此:

orig_self_t = self.t
new_self_t = min(orig_self_t, 1022)
self.learning_rate = (self.learning_rate_init *
                          np.sqrt(1 - self.beta_2 ** new_self_t) /
                          (1 - self.beta_1 ** new_self_t))