本文通过手动更新变量描述了利用pytorch Adam优化器更新变量的本质
求函数 y = a**2的极小值
#%%
import torch
from torch import optim
import matplotlib.pyplot as plt
#%% 手动更新变量
a = torch.tensor([2],dtype=torch.float32,requires_grad=True)
y = a**2
alist = []
for i in range(1000):
a.grad = torch.zeros_like(a)
y.backward(retain_graph=True)
a.data -= 0.1*a.grad #变量更新
#绘图用,查看变量值
temp = a.data.clone().numpy()
alist.append(temp)
plt.plot(alist)
plt.show()
#%% 利用优化器更新变量
a = torch.tensor([2],dtype=torch.float32,requires_grad=True)
y = a**2
alist = []
opt = optim.Adam([a],lr=1e-1)
for i in range(1000):
opt.zero_grad()
y.backward(retain_graph=True) #手动求取梯度
opt.step() #更新变量
#绘图用,查看变量值
temp = a.data.clone().numpy() #pytorch的深拷贝
alist.append(temp)
plt.plot(alist)
plt.show()
结果
手动更新:
利用Adam更新