如何 get/set 火炬中模型的重量(增量)?

How to get/set model's weight (delta) in torch?

很抱歉作为 torch 的新手提问,但我保证会通过文档和 Internet 进行大量搜索。

我主要有两个需求, 第一个是在训练一个或多个批次后获得权重增量, 第二个是给模型设置新的权重。

这意味着我想通过我自己的方法(使用外部库)更新权重, 有可能在火炬中实现吗?

似乎 torch 有一个抽象 module class [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()方法来修改权重。

[1] https://github.com/torch/nn/blob/master/doc/module.md#flatparameters-flatgradparameters-getparameters