将神经网络加到列表里面之后,用.to(device)函数迁移参数到gpu上失败

使用[nn.Linear(10,10) for i in range(n)]生成多个相同的神经网络被重复调用,独自训练参数,结果参数迁移的时候发现只有列表的第一个对象的参数被迁移到gpu上了,其他参数都没有被迁移过去。

查阅资料后发现,需要将其转换成torch专有的给神经模块设计的列表类nn.ModuleList

看这篇博客

nn.ModuleList 这个类,可以把任意 nn.Module 的子类 (比如 nn.Conv2d, nn.Linear 之类的) 加到这个 list 里面,类似于Python 自带的 list 。

如果只使用python自带的list,会发现
使用 Python 的 list 添加的网络层和它们的 parameters 并没有自动注册到我们的网络中。当然,我们还是可以使用 forward 来计算输出结果。但是如果用 net2 实例化的网络进行训练的时候,因为这些层的 parameters 不在整个网络之中,所以其网络参数也不会被更新,也就是无法训练。因此参数迁移的时候这些网络层的参数也没有办法使用model.to(device)一次性迁移过去。

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 08:52:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 08:52:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 08:52:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 08:52:07       20 阅读

热门阅读

  1. 智能需要适时动态的分类和打标

    2024-04-14 08:52:07       36 阅读
  2. 排序算法(更新ing)

    2024-04-14 08:52:07       19 阅读
  3. TLS是什么,为什么TLS1.0不安全

    2024-04-14 08:52:07       23 阅读
  4. Spring Security Oauth2 之 理解OAuth 2.0授权流程

    2024-04-14 08:52:07       13 阅读
  5. python flask 运行本地其他的python文件

    2024-04-14 08:52:07       42 阅读
  6. Qt学习笔记(一)

    2024-04-14 08:52:07       18 阅读
  7. 【python】基于librosa库提取音频特征

    2024-04-14 08:52:07       15 阅读
  8. C++ 中对 const 的浅显理解

    2024-04-14 08:52:07       17 阅读