抱歉以一个torch新手的身份提问,但我保证已经在文档和网络上搜索了很多内容。
我有两个主要需求,首先是获取训练一个或多个批次后的权重增量,其次是将新的权重设置到模型中。
这意味着我想通过自己的方法(使用外部库)来更新权重,在torch中是否可以实现这一点?
看起来torch有一个抽象的module
类 [1],但它的接口并不完全符合我的需求。
[1] https://github.com/torch/nn/blob/master/doc/module.md#nn.Module
回答:
最后,通过咨询几位同事,我找到了答案。
正确理解getParameters()
[1] 是解决问题的关键点。getParameters()
会获取扁平化的parameters
(权重)和gradParameters
(权重增量),此外,这是一个内存转换,应该如文档所述仅调用一次。
这意味着getParameters()
返回的值正是我们所需的,并且返回值的更改将反映到原始模型中,从而更新权重。
因此,我们不仅可以通过getParameters()
返回的parameters
获取扁平化的权重,还可以通过parameters:copy()
简单地设置权重。我们完全可以使用其他torch.Tensor()
方法来修改权重。