基于pytorch的代码在GPU和CPU上训练时,训练输出结果不同问题
最近打算将代码放在GPU上跑,但是每次跑出来的结果都和CPU跑出来的结果不同,代码是完全一样的,为什么会出现这个问题呢?


这是CPU(上)GPU(下)运行结果,可以看出来第一次迭代就不同的结果。分析了很久,还以为是GPU浮点运算误差导致的,结果最后发现是随机种子产生的随机数不同。这里就贴一下我遇到的随机数种子问题吧。

在CPU上我本来是这样设置的。 这里是在CPU上运行的,所以将参数设置为的是使用CPU产生的随机数,就是这里,将代码放在GPU上跑时,这里的device是GPU,是由GPU产生的随机数,所以这个语句导致的就是随机数产生不一样,即使随机种子一样的,但是不同device产生了不同的随机数。

为了解决这个问题只需要把代码改一下就行,如上图,这里表示将参数指定到CPU或者GPU上,但是参数的生成都是使用CPU生成的。在CPU上跑,那么就是CPU生成,CPU使用,但是在GPU上跑的时候也是由CPU生成,但是参数搬到了GPU上,这里主要是使随机数的产生都是由CPU产生。问题解决,这个问题虽然不难,但是也需要注意一下。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
