python zero_grad()

有两种方式直接把模型的参数梯度设成0:

model.zero_grad()
optimizer.zero_grad() # 当optimizer=optim.Optimizer(model.parameters())时,两者等效

如果想要把某一Variable的梯度置为0,只需用以下语句:

Variable.grad.data.zero_()
# Zero the gradients before running the backward pass.
model.zero_grad()

# Before the backward pass, use the optimizer object to zero all of the
# gradients for the variables it will update (which are the learnable weights
# of the model)
optimizer.zero_grad()

另外Pytorch 为什么每一轮batch需要设置optimizer.zero_grad:

根据pytorch中的backward()函数的计算,当网络参量进行反馈时,梯度是被积累的而不是被替换掉;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积,因此这里就需要每个batch设置一遍zero_grad 了。

你可能感兴趣的:(AI)