python中的Pytorch建模流程是什么

python中的Pytorch建模流程是什么

小编给大家分享一下python中的Pytorch建模流程是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一般我们训练神经网络有以下步骤:

python中的Pytorch建模流程是什么

  • 导入库

  • 设置训练参数的初始值

  • 导入数据集并制作数据集

  • 定义神经网络架构

  • 定义训练流程

  • 训练模型

以下,我就将上述步骤使用代码进行注释讲解:

1 导入库

importtorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromtorchimportoptimfromtorch.utils.dataimportDataLoader,DataLoaderimporttorchvisionimporttorchvision.transformsastransforms

2 设置初始值

#学习率lr=0.15#优化算法参数gamma=0.8#每次小批次训练个数bs=128#整体数据循环次数epochs=10

3 导入并制作数据集

本次我们使用FashionMNIST图像数据集,每个图像是一个28*28的像素数组,共有10个衣物类别,比如连衣裙、运动鞋、包等。

注:初次运行下载需要等待较长时间。

#导入数据集mnist=torchvision.datasets.FashionMNIST(root='./Datastes',train=True,download=True,transform=transforms.ToTensor())#制作数据集batchdata=DataLoader(mnist,batch_size=bs,shuffle=True,drop_last=False)

我们可以对数据进行检查:

forx,yinbatchdata:print(x.shape)print(y.shape)break#torch.Size([128,1,28,28])#torch.Size([128])

可以看到一个batch中有128个样本,每个样本的维度是1*28*28。

之后我们确定模型的输入维度与输出维度:

#输入的维度input_=mnist.data[0].numel()#784#输出的维度output_=len(mnist.targets.unique())#10

4 定义神经网络架构

先使用一个128个神经元的全连接层,然后用relu激活函数,再将其结果映射到标签的维度,并使用softmax进行激活。

#定义神经网络架构classModel(nn.Module):def__init__(self,in_features,out_features):super().__init__()self.linear1=nn.Linear(in_features,128,bias=True)self.output=nn.Linear(128,out_features,bias=True)defforward(self,x):x=x.view(-1,28*28)sigma1=torch.relu(self.linear1(x))sigma2=F.log_softmax(self.output(sigma1),dim=-1)returnsigma2

5 定义训练流程

在实际应用中,我们一般会将训练模型部分封装成一个函数,而这个函数可以继续细分为以下几步:

  • 定义损失函数与优化器

  • 完成向前传播

  • 计算损失

  • 反向传播

  • 梯度更新

  • 梯度清零

在此六步核心操作的基础上,我们通常还需要对模型的训练进度、损失值与准确度进行监视。

注释代码如下:

#封装训练模型的函数deffit(net,batchdata,lr,gamma,epochs):#参数:模型架构、数据、学习率、优化算法参数、遍历数据次数#5.1定义损失函数criterion=nn.NLLLoss()#5.1定义优化算法opt=optim.SGD(net.parameters(),lr=lr,momentum=gamma)#监视进度:循环之前,一个样本都没有看过samples=0#监视准确度:循环之前,预测正确的个数为0corrects=0#全数据训练几次forepochinrange(epochs):#对每个batch进行训练forbatch_idx,(x,y)inenumerate(batchdata):#保险起见,将标签转为1维,与样本对齐y=y.view(x.shape[0])#5.2正向传播sigma=net.forward(x)#5.3计算损失loss=criterion(sigma,y)#5.4反向传播loss.backward()#5.5更新梯度opt.step()#5.6梯度清零opt.zero_grad()#监视进度:每训练一个batch,模型见过的数据就会增加x.shape[0]samples+=x.shape[0]#求解准确度:全部判断正确的样本量/已经看过的总样本量#得到预测标签yhat=torch.max(sigma,-1)[1]#将正确的加起来corrects+=torch.sum(yhat==y)#每200个batch和最后结束时,打印模型的进度if(batch_idx+1)%200==0orbatch_idx==(len(batchdata)-1):#监督模型进度print("Epoch{}:[{}/{}{:.0f}%],Loss:{:.6f},Accuracy:{:.6f}".format(epoch+1,samples,epochs*len(batchdata.dataset),100*samples/(epochs*len(batchdata.dataset)),loss.data.item(),float(100.0*corrects/samples)))

6 训练模型

#设置随机种子torch.manual_seed(51)#实例化模型net=Model(input_,output_)#训练模型fit(net,batchdata,lr,gamma,epochs)#Epoch2:[25600/6000004%],Loss:0.524430,Accuracy:69.570312#Epoch2:[51200/6000009%],Loss:0.363422,Accuracy:74.984375#......#Epoch20:[600000/600000100%],Loss:0.284664,Accuracy:85.771835

现在我们已经用Pytorch训练了最基础的神经网络,并且可以查看其训练成果。大家可以将代码复制进行运行!

虽然没有用到复杂的模型,但是我们在每次建模时的基本思想都是一致的

以上是“python中的Pytorch建模流程是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2022-03-03 21:31:54
收藏
分享
海报
0 条评论
38
上一篇:C#单例模式的示例分析 下一篇:Vue如何实现通知或详情类弹窗
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码