白云区建材网站建设推广,苏州企业网络推广,阿里云域名注册步骤,偃师网站开发优化函数主要有#xff0c;SGD, Adam#xff0c;RMSProp这三种#xff0c;并且有lr学习率#xff0c;momentum动量#xff0c;betas等参数需要设置。
通过这篇文章#xff0c;可以学到pytorch中的优化函数的使用。
1.代码
代码参考《python深度学习-基于pytorch》SGD, AdamRMSProp这三种并且有lr学习率momentum动量betas等参数需要设置。
通过这篇文章可以学到pytorch中的优化函数的使用。
1.代码
代码参考《python深度学习-基于pytorch》改了一下网络结构其他没变化。
import torch
import torch.utils.data as Data
import torch.nn.functional as Func
import matplotlib.pyplot as pltLR 0.01
BATCH_SIZE 20
EPOCH 12#生成数据
#将一维变成二维数据
x torch.unsqueeze(torch.linspace(-1,1,1000),dim1)
y x.pow(2) 0.1 * torch.normal(torch.zeros(*x.size()))A x.size()
B x.size()torch_dataset Data.TensorDataset(x,y)
data_loader Data.DataLoader(datasettorch_dataset,batch_size BATCH_SIZE,shuffleFalse)class Net(torch.nn.Module):def __init__(self):super(Net, self).__init__()self.hidden1 torch.nn.Linear(1,20)self.hidden2 torch.nn.Linear(20, 40)self.predict torch.nn.Linear(40,1)def forward(self,x):x Func.relu(self.hidden1(x))x Func.relu(self.hidden2(x))x self.predict(x)return xnet_SGD Net()
net_Momentum Net()
net_PMSProp Net()
NET_Adam Net()nets {net_SGD,net_Momentum,net_PMSProp,NET_Adam }opt_SGD torch.optim.SGD(net_SGD.parameters(),lrLR)
opt_Momentum torch.optim.SGD(net_Momentum.parameters(),momentum0.3,lrLR)
opt_PMSProp torch.optim.RMSprop(net_PMSProp.parameters())
opt_Adam torch.optim.Adam(NET_Adam.parameters(),lrLR,betas(0.9,0.99))optimizers {opt_SGD,opt_Momentum, opt_PMSProp, opt_Adam}loss_func torch.nn.MSELoss()loss_his [[],[],[],[]]for epoch in range((EPOCH)):for step,(batch_x,batch_y) in enumerate(data_loader):for net, opt, l_his, in zip(nets, optimizers,loss_his):output net(batch_x)loss loss_func(output,batch_y)opt.zero_grad()loss.backward()opt.step()l_his.append(loss.data.numpy())
labels [SGD,SGD_Momentum,RMSProp,Adam]#可视化
for i, l_his in enumerate(loss_his):plt.plot(l_his,label labels[i])
plt.legend(locbest)
plt.xlabel(steps)
plt.ylabel(loss)
# plt.ylim((0,0.8))
plt.show()2.结果
通过测试发现每一次的结果都不一样每一次结果的显示图也不一样。因为shuffleTrue。
为shuffleTrue时候显示的其中一个结果为 当shuffle为False时发现也不稳定其中一张结果显示为 3.大家copy代码后可以调一调batch_sizelrmomentumbetas等参数。
其中lr动态修改学习率的代码为
print(opt_SGD.param_groups)
opt_SGD.param_groups[0][lr]*0.1
opt_SGD.param_groups[0][momentum]