pytorch各种报错个人笔记
Posted _less is more
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch各种报错个人笔记相关的知识,希望对你有一定的参考价值。
1、one of the variables needed for gradient computation has been modified by an inplace operation
可能有多种原因
1、以 ‘_’ 结尾的函数
2、+=、/=这样的操作
3、激活函数如 torch.nn.ReLU(inplace=True)
如果是第二种,把 a += b 换成 a = a + b 即可,第三种则置inplace为False;若是第一种则麻烦一点,需要找替代函数或者自己实现该函数的功能
2、An attempt has been made to start a new process before the current process has finished its bootstrapping phase.
在使用torch.multiprocessing.spawn时报此错。pytorch的torch.multiprocessing是基于python的原生multiprocessing进行二次开发的模块,在multiprocessing中,当在另一个CPU核心上产生一个子进程时,会将原来的主py文件再次导入,因此,在如下示例代码中
# start process for each gpu
mp.spawn(main, nprocs=args.g, args=(args,))
当其被加载至另一个CPU核心运行时,此语句会被再执行一遍,因此会递归产生大量子进程,最后导致该报错。因此此语句应该加入如下代码后进行运行:
if __name__ == '__main__':
# start process for each gpu
mp.spawn(main, nprocs=args.g, args=(args,))
这样子进程就不会再运行mp.spawn了
以上是关于pytorch各种报错个人笔记的主要内容,如果未能解决你的问题,请参考以下文章
(d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记前言(介绍各种机器学习问题)以及数据操作预备知识Ⅲ(概率)