如何将BoTorch模型参数与自定义torch.nn.Parameter列表加入同一优化器?
解决优化器参数传入错误的方案
错误原因
self.model.parameters()返回的是参数迭代器对象,而非直接的参数列表。你之前的写法把这个迭代器作为一个整体元素加入列表,导致优化器无法识别——它只能处理单个的torch.Tensor或torch.nn.Parameter实例。
正确实现方式
有两种可靠的写法:
方法1:转换为列表后拼接
将模型参数迭代器转为列表,再和你的潜在参数列表直接合并:
optimizer = torch.optim.Adam( list(self.model.parameters()) + self.latent_params_class.latent_params, lr=lr )
方法2:用迭代器链式拼接(内存更高效)
如果参数规模较大,使用itertools.chain拼接两个参数迭代器,避免生成完整列表占用额外内存:
import itertools optimizer = torch.optim.Adam( itertools.chain(self.model.parameters(), self.latent_params_class.latent_params), lr=lr )
两种方式都能让优化器正确遍历所有需要更新的参数张量。
内容的提问来源于stack exchange,提问作者Gooby
相关产品推荐
相关产品推荐

