将神经网络加到列表里面之后,用.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)一次性迁移过去。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值