常见优化器的PyTorch实现是怎样的
发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,这篇文章将为大家详细讲解有关常见优化器的PyTorch实现是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。这里主要讲不同常见优化器代码的实现,以
千家信息网最后更新 2024年10月19日常见优化器的PyTorch实现是怎样的
这篇文章将为大家详细讲解有关常见优化器的PyTorch实现是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
这里主要讲不同常见优化器代码的实现,以及在一个小数据集上做一个简单的比较。
其中,SGD和SGDM,还有Adam是pytorch自带的优化器,而RAdam是最近提出的一个说是Adam更强的优化器,但是一般情况下真正的大佬还在用SGDM来做优化器。
导入必要库:
import torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optimimport matplotlib.pyplot as pltimport torch.utils.data as Datafrom torch.optim.optimizer import Optimizerimport math
主程序部分:
LR = 0.01
BATCH_SIZE = 32
EPOCH = 12
# fake dataset
x = torch.unsqueeze(torch.linspace(-1, 1, 300), dim=1)
y = x.pow(2) + 0.1 * torch.normal(torch.zeros(*x.size()))
torch_dataset = Data.TensorDataset(x, y)
loader = Data.DataLoader(
dataset=torch_dataset,
batch_size=BATCH_SIZE,
shuffle=True,
num_workers=2
)
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.hidden = nn.Linear(1, 20)
self.prediction = nn.Linear(20, 1)
def forward(self, x):
x = F.relu(self.hidden(x))
x = self.prediction(x)
return x
def main():
net_SGD = Net()
net_Momentum = Net()
net_Adam = Net()
net_RAdam = Net()
nets = [net_SGD, net_Momentum, net_Adam, net_RAdam]
opt_SGD = optim.SGD(net_SGD.parameters(), lr=LR)
opt_Momentum = optim.SGD(net_Momentum.parameters(), lr=LR, momentum=0.9)
opt_Adam = optim.Adam(net_Adam.parameters(), lr=LR, betas=(0.9, 0.99))
opt_RAdam = RAdam(net_RAdam.parameters(),lr=LR,weight_decay=0)
optimizers = [opt_SGD, opt_Momentum, opt_Adam, opt_RAdam]
loss_func = nn.MSELoss()
losses_his = [[], [], [], []]
# training
for epoch in range(EPOCH):
print('EPOCH:', epoch)
for step, (batch_x, batch_y) in enumerate(loader):
b_x = batch_x
b_y = batch_y
for net, opt, l_his in zip(nets, optimizers, losses_his):
out = net(b_x)
loss = loss_func(out, b_y)
opt.zero_grad()
loss.backward()
opt.step()
l_his.append(loss.item())
labels = ['SGD', 'Momentum', 'Adam','RAdam']
for i, l_his in enumerate(losses_his):
plt.plot(l_his, label=labels[i])
plt.legend(loc='best')
plt.xlabel('Steps')
plt.ylabel('Loss')
plt.ylim((0, 0.2))
plt.show()
if __name__ == '__main__':
main()
下图是优化器的对比:
可以看出来,Adam的效果可以说是非常好的。然后SGDM其次,SGDM是大佬们经常会使用的,所以在这里虽然看起来SGDM效果不如Adam,但是依然推荐在项目中,尝试一下SGDM的效果。
关于常见优化器的PyTorch实现是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
常见
效果
内容
文章
更多
知识
篇文章
说是
大佬
不同
不错
必要
下图
主程序
代码
常会
情况
数据
质量
部分
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发行的职业情况
应用软件开发过程中用到的工具
怎么查数据库表
数据库断言触发器区别
浙江常用软件开发参考价
抚顺政务软件开发报价
软件开发总监介绍
网络安全防御体系构建书籍
标准数据库有哪些
100tal邮箱的服务器
如何通过服务器远程控制
魔兽霜之哀伤武器数据库
郴州手机棋牌游戏软件开发
服务器可以查看客户机浏览内容吗
数据导入hive数据库的办法
贵阳软件开发培训哪里好
如何查询易语言数据库
饥荒联机服务器电脑配置
软件开发电脑一般啥配置比较好
属于数据库安全技术的是什么
dayz 独立版 服务器
域控服务器硬件配置
服务器与路由器交换
平度ios软件开发服务公司
精准普法进行网络安全法讲座
java数据库成绩查询
与他人共享网络技术
生存战争服务器版联机
图片服务器租用
像素精灵加载服务器失败