很抱歉要问火炬新手,但我保证会通过文件和互联网进行大量搜索。
我需要两个主要要求, 第一个是在训练一个或多个批次后得到重量增量, 第二个是将新权重设置为模型。
这意味着我想通过自己的方法(使用外部库)更新权重, 能够在火炬中实现这一目标吗?
火炬似乎有一个抽象的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
答案 0 :(得分:2)
最后,我通过引用几位同事找到答案。
正确理解getParameters()
[1]是解决问题的关键。 getParameters()
会得到展平parameters
(权重)和gradParameters
(权重增量),更重要的是,这是一个记忆过渡,应该只记录一次。
这意味着getParameters()
的返回值正是我们想要的,返回值的更改将反映到更新权重的原始模型中。
因此,我们不仅可以通过parameters
返回的getParameters()
获得展平权重,还可以通过parameters:copy()
设置权重。我们绝对可以使用其他torch.Tensor()
方法来修改权重。