如何在火炬中获得/设定模型的重量(delta)?

时间:2016-05-29 02:55:20

标签: machine-learning neural-network torch

很抱歉要问火炬新手,但我保证会通过文件和互联网进行大量搜索。

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

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

火炬似乎有一个抽象的List<InsnList> l = Lists.newList(); InsnList il = new InsnList(); for (AbstractInsnNode ain : method.instructions.toArray()) { if (ain.getType == AbstractInsnNode.FRAME){ l.add(il); il = new InsnList(); } else { il.add(ain); } } 类[1],但它的界面并不适合我的所有需要​​。

[1] https://github.com/torch/nn/blob/master/doc/module.md#nn.Module

1 个答案:

答案 0 :(得分:2)

最后,我通过引用几位同事找到答案。

正确理解getParameters() [1]是解决问题的关键。 getParameters()会得到展平parameters(权重)和gradParameters(权重增量),更重要的是,这是一个记忆过渡,应该只记录一次。

这意味着getParameters()的返回值正是我们想要的,返回值的更改将反映到更新权重的原始模型中。

因此,我们不仅可以通过parameters返回的getParameters()获得展平权重,还可以通过parameters:copy()设置权重。我们绝对可以使用其他torch.Tensor()方法来修改权重。

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