如何 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()
方法来修改权重。
很抱歉作为 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()
方法来修改权重。