在一个优化器中设置多个网络参数的写法

框架:pytorch

在使用神经网络的时候有时候会将几个不同的神经网络组合,再采用梯度下降更新参数,那么在设置优化器的时候该如何将多个神经网络的参数进行融合呢?目前网络上的大部分信息都是采用Itertools.chain()将参数融合在一起:

import itertools 
... 
optimizer = optim.Adam(itertools.chain(model1.parameters(), model2.parameters())) 
...
这里涉及到两个知识点,Itertools.chain()和pytorch神经网络的参数

1. Itertools.chain()

链接
Python Itertools.chain()用法及代码示例
将所有可迭代对象组合在一起,并生成一个可迭代对象作为输出。它的输出不能直接使用,因此不能显式转换为可迭代对象。

from itertools import chain 
# some consonants 
consonants =['d', 'f', 'k', 'l', 'n', 'p'] 
# some vowels 
vowels =['a', 'e', 'i', 'o', 'u'] 
# resultatnt list 
res = list(chain(consonants, vowels)) 
# sorting the list 
res.sort() 
print(res)

2. pytorch神经网络的参数

在这里插入图片描述
parameters()函数返回的是一个Module.parameters的对象,实际上相当于参数的容器,而itertools.chain()是将多个模型的参数整合进一个新的容器内。
但是我遇到的一个问题是我的模型的个数不止一个,并且数量是不固定的,而上述方法中又需要把每个模型的参数一一放进itertools.chain()函数中,所以一开始把多个模型的参数统一放进一个列表中,然后把列表传入itertools.chain()函数,但是并不可以,原因是优化器需要传入的参数是一组tensor,但是采用上述方法传入的是Module.parameters的对象,所以此路不通。
考虑到list(net.parameters())实际上就是将Module.parameters解析成模型参数张量的列表,那么直接对参数进行组合:

optimizer = optim.Adam(list(model1.parameters())+list(model2.parameters())) 
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值