pytorch 之 optimizer.zero_grad()

optimizer.zero_grad() 功能

梯度初始化为零,把loss关于weight的导数变成0

为什么每一轮batch都需要设置optimizer.zero_grad

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

每个batch必定执行的操作步骤

optimizer.zero_grad() # 梯度初始化为零,把loss关于weight的导数变成0
output = model(data) # forward:将数据传入模型,前向传播求出预测的值
loss = F.cross_entropy(output, target) # 求loss
loss.backward() # backward:反向传播求梯度
optimizer.step() # optimizer:更新所有参数

仅用作QA学习,来源:https://blog.csdn.net/scut_salmon/article/details/82414730

你可能感兴趣的:(pytorch,深度学习)