当前位置:首页 > 数码 > 打破-外围-深刻剖析优化器-PyTorch-开启性能优化之旅 (打破外围束缚的例子文化芯片)

打破-外围-深刻剖析优化器-PyTorch-开启性能优化之旅 (打破外围束缚的例子文化芯片)

admin8个月前 (04-20)数码26

今儿我们聊聊pytorch中的优化器。

优化器在深度学习中的选用间接影响模型的训练成果和速度。不同的优化器适用于不同的疑问,其性能的差异或许造成模型更快、更稳固地收敛,或许在某些义务上体现更好。

因此,选用适合的优化器是深度学习模型调优中的一个关键决策,能够清楚影响模型的性能和训练效率。

PyTorch自身提供了许多优化器,用于训练神经网络时降级模型的权重。

经常出现优化器

我们先罗列PyTorch中罕用的优化器,以及便捷引见:

SGD(StochasticGradientDescent)

随机梯度降低是最基本的优化算法之一。它经过计算损失函数关于权重的梯度,并沿着梯度的负方向降级权重。

optimizer=torch.optim.SGD(model.parameters(),lr=learning_rate)

Adam是一种自顺应学习率的优化算法,联合了AdaGrad和RMSProp的思维。它能够自顺应地为每个参数计算不同的学习率。

optimizer=torch.optim.Adam(model.parameters(),lr=learning_rate)

Adagrad是一种自顺应学习率的优化算法,依据参数的历史梯度调整学习率。但因为学习率逐渐减小,或许造成训练过早中止。

optimizer=torch.optim.Adagrad(model.parameters(),lr=learning_rate)

RMSProp也是一种自顺应学习率的算法,经过思考梯度的滑动平均来调整学习率。

optimizer=torch.optim.RMSprop(model.parameters(),lr=learning_rate)

Adadelta是一种自顺应学习率的优化算法,是RMSProp的改良版本,经过思考梯度的移动平均和参数的移动平均来灵活调整学习率。

optimizer=torch.optim.Adadelta(model.parameters(),lr=learning_rate)

一个完整案例

在这里,我们聊聊如何经常使用PyTorch训练一个便捷的卷积神经网络(CNN)来启入手写数字识别。

这个案例经常使用的是MNIST数据集,并经常使用Matplotlib库绘制了损失曲线和准确率曲线。

importtorchimporttorch.nnasnnimporttorch.optimasoptimfromtorchvisionimportdatasets,transformsfromtorch.utils.dataimportDataLoaderimportmatplotlib.pyplotasplt#设置随机种子torch.manual_seed(42)#定义数据转换transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,),(0.5,))])#下载和加载MNIST数据集trn_dataset=datasets.MNIST(root='./data',train=True,download=True,transform=transform)test_dataset=datasets.MNIST(root='./data',train=False,download=True,transform=transform)train_loader=DataLoader(train_dataset,batch_size=64,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=1000,shuffle=False)#定义便捷的卷积神经网络模型classCNN(nn.Module):def__init__(self):super(CNN,self).__init__()self.conv1=nn.Conv2d(1,32,kernel_size=3,stride=1,padding=1)self.relu=nn.ReLU()self.pool=nn.MaxPool2d(kernel_size=2,stride=2)self.conv2=nn.Conv2d(32,64,kernel_size=3,stride=1,padding=1)self.fc1=nn.Linear(64*7*7,128)self.fc2=nn.Linear(128,10)defforward(self,x):x=self.conv1(x)x=self.relu(x)x=self.pool(x)x=self.conv2(x)x=self.relu(x)x=self.pool(x)x=x.view(-1,64*7*7)x=self.fc1(x)x=self.relu(x)x=self.fc2(x)returnx#创立模型、损失函数和优化器model=CNN()criterion=nn.CrossEntropyLoss()optimizer=optim.Adam(model.parameters(),lr=0.001)#训练模型num_epochs=5train_losses=[]train_accuracies=[]forepochinrange(num_epochs):model.train()total_loss=0.0correct=0total=0forinputs,labelsintrain_loader:optimizer.zero_grad()outputs=model(inputs)loss=criterion(outputs,labels)loss.backward()optimizer.step()total_loss+=loss.item()_,predicted=torch.max(outputs.data,1)total+=labels.size(0)correct+=(predicted==labels).sum().item()accuracy=correct/totaltrain_losses.end(total_loss/len(train_loader))train_accuracies.append(accuracy)print(f"Epoch{epoch+1}/{num_epochs},Loss:{train_losses[-1]:.4f},Accuracy:{accuracy:.4f}")#绘制损失曲线和准确率曲线plt.figure(figsize=(10,5))plt.subplot(1,2,1)plt.plot(train_losses,label='TrainingLoss')plt.title('TrainingLoss')plt.xlabel('Epoch')plt.ylabel('Loss')plt.legend()plt.subplot(1,2,2)plt.plot(train_accuracies,label='TrainingAccuracy')plt.title('TrainingAccuracy')plt.xlabel('Epoch')plt.ylabel('Accuracy')plt.legend()plt.tight_layout()plt.show()#在测试集上评价模型model.eval()correct=0total=0withtorch.no_grad():forinputs,labelsintest_loader:outputs=model(inputs)_,predicted=torch.max(outputs.data,1)total+=labels.size(0)correct+=(predicted==labels).sum().item()accuracy=correct/totalprint(f"Accuracyontestset:{accuracy*100:.2f}%")

上述代码中,我们定义了一个便捷的卷积神经网络(CNN),经常使用交叉熵损失和Adam优化器启动训练。

在训练环节中,我们记载了每个epoch的损失和准确率,并经常使用Matplotlib库绘制了损失曲线和准确率曲线。

外围

我是小壮,下期见!


这个错误通常是由于PyTorch版本过低导致的。 Lookahead优化器是在PyTorch 1.5及以上版本中才被支持的。 如果您的PyTorch版本过低,可以尝试更新到最新版本或者使用早期版本的PyTorch实现自己的Lookahead优化器。 如果您已经使用的是PyTorch 1.5及以上版本,那么可以尝试检查您的代码,看看是否有任何变量名称或参数名称与defaults相同。 也可以尝试重新安装PyTorch和相关依赖库,看看是否可以解决问题。 如果以上方法均不能解决问题,可以考虑在PyTorch官方论坛上提出问题并提供更多细节,以获得更具体的帮助。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Pytorch

“打破-外围-深刻剖析优化器-PyTorch-开启性能优化之旅 (打破外围束缚的例子文化芯片)” 的相关文章

CNN-开发指南-Pytorch-核心要点突破 (CNN开发语言)

CNN-开发指南-Pytorch-核心要点突破 (CNN开发语言)

卷积神经网络 (CNN) 是一种深度学习模型,用于处理图像、视频和音频等多维数据。它们在图像分类、对象检测、图像生成等领域有着广泛的应用。 原理 CNN 的核心思想是...

终极指南-基于Pytorch的从零开局的指标检测 (终极指南针下载手机版)

终极指南-基于Pytorch的从零开局的指标检测 (终极指南针下载手机版)

引言 指标检测是计算机视觉中一个十分盛行的义务,在这个义务中,给定一个图像,你预测图像中物体的解围盒(通常是矩形的),并且识别物体的类型。在这个图像中或许有多个对象,而且如今有各种先进的技术...