gpt4 book ai didi

python - 如何在 Chainer 中对变量应用优化器?

转载 作者:行者123 更新时间:2023-12-01 08:54:59 24 4
gpt4 key购买 nike

这是 Pytorch 中的一个示例:

optimizer = optim.Adam([modifier_var], lr=0.0005)

在 Tensorflow 中:

self.train = self.optimizer.minimize(self.loss, var_list=[self.modifier])

但是 Chainer 的优化器只能在“链接”上使用,如何在 Chainer 中的变量上应用优化器?

最佳答案

简而言之,无法直接将chainer.Variable(甚至chainer.Parameter)分配给chainer.Optimizer

以下是一些多余的解释。

首先,我重新定义了 VariableParameter 以避免混淆。

Variable 在 PyTorch v4 中为 (1) torch.Tensor,在 PyTorch v3 中为 (2) torch.autograd.Variable,以及 ( 3) Chainer v4 中的chainer.Variable
Variable 是一个拥有两个张量的对象; .data.grad。这是充分必要条件,因此 Variable 不一定是可学习参数,而是优化器的目标。

在这两个库中,还有另一个类Parameter,它与Variable类似但不相同。 Parameter 在 Pytorch 中为 torch.autograd.Parameter,在 Chainer 中为 chainer.Parameter
参数必须是可学习的参数并且应该进行优化。

因此,不应该将Variable(而不是Parameter)注册到Optimizer(尽管PyTorch允许注册Variable Optimizer:这只是为了向后兼容)。

其次,在 PyTorch 中 torch.nn.Optimizer 直接优化 Parameter,但在 Chainer 中 chainer.Optimizer 不优化 Parameter :相反,chainer.UpdateRule 会这样做。 Optimizer 只是将 UpdateRule 注册到 Link 中的 Parameter

因此,chainer.Optimizer 不接收 Parameter 作为其参数是很自然的,因为它只是 UpdateRule 的“送货员” .

如果你想为每个Parameter附加不同的UpdateRule,你应该直接创建一个UpdateRule子类的实例,并将其附加到参数

关于python - 如何在 Chainer 中对变量应用优化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52830419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com