其他
【他山之石】pytorch中optimizer对loss的影响
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
地址:https://www.zhihu.com/people/agnio-ltp
01
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision
import torchvision.datasets as dset
import torchvision.transforms as transforms
import torch.optim as optim
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.f1 = nn.Linear(28*28, 100, bias=True)
self.f2 = nn.Linear(100, 10, bias=True)
def forward(self, data):
data = self.f1(data)
data = F.relu(data)
data = self.f2(data)
return data
root = 'data/MNIST'
transformfun = transforms.Compose([
transforms.ToTensor(),
]
)
mnist = torchvision.datasets.MNIST(root, train=True, transform=transformfun, target_transform=None, download=True)
count = 8 #每次选择8张进行训练,这里没必要选择太多
mnist_loader = torch.utils.data.DataLoader(dataset = mnist
,batch_size=count
,shuffle=True
)
def other_optimizer(optimizer,model,mnist_loader):
for epoch in range(10): #反向传播10次,并计算总的损失值
total_loss = 0
for batch in mnist_loader:
images, labels = batch
inputs = images.reshape(count,-1)
output = model(inputs)
loss = F.cross_entropy(output, labels)#计算损失值
optimizer.zero_grad()
loss.backward() # 反向传播
optimizer.step() # 更新权值
total_loss += loss.item()
print("反向传播次数:", epoch, " loss:", total_loss)
02
model = Model()
optimizer = optim.SGD(model.parameters(), lr=0.01)
other_optimizer(optimizer,model,mnist_loader)
03
optimizer = optim.SGD(model.parameters(), lr=0.1,momentum=0.9)#注意这里lr=0.1
other_optimizer(optimizer,model,mnist_loader)
04
optimizer_Nesterov=optim.SGD(model.parameters(),lr=0.01, momentum=0.9, nesterov=True)
other_optimizer(optimizer_Nesterov,model,mnist_loader)
05
optimizer_RMS=optim.RMSprop(model.parameters(), lr=0.01, alpha=0.99)
print('RMSprop分类器:')
other_optimizer(optimizer_RMS,model,mnist_loader)
06
optimizer_AdaGrad=optim.Adam(model.parameters(), lr=0.01)
print('AdaGrad分类器:')
other_optimizer(optimizer_AdaGrad,model,mnist_loader)
07
#Adam看起来像是RMSProp的Momentum版
optimizer_Adam=optim.Adam(model.parameters(), lr=0.01, betas=(0.9, 0.99))
print('Adam优化算法:')
other_optimizer(optimizer_Adam,model,mnist_loader)
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
“他山之石”历史文章
使用PyTorch 1.6 for Android
神经网络解微分方程实例:三体问题
pytorch 实现双边滤波
编译PyTorch静态库
工业界视频理解解决方案大汇总
动手造轮子-rnn
凭什么相信你,我的CNN模型?关于CNN模型可解释性的思考
c++接口libtorch介绍& vscode+cmake实践
python从零开始构建知识图谱
一文读懂 PyTorch 模型保存与载入
适合PyTorch小白的官网教程:Learning PyTorch With Examples
pytorch量化备忘录
LSTM模型结构的可视化
PointNet论文复现及代码详解
更多他山之石专栏文章,
请点击文章底部“阅读原文”查看
分享、点赞、在看,给个三连击呗!