Pytorch深度学习者必备技能教程(五)

上传人:鲁** 文档编号:467438759 上传时间:2022-10-03 格式:DOCX 页数:5 大小:80.03KB
返回 下载 相关 举报
Pytorch深度学习者必备技能教程(五)_第1页
第1页 / 共5页
Pytorch深度学习者必备技能教程(五)_第2页
第2页 / 共5页
Pytorch深度学习者必备技能教程(五)_第3页
第3页 / 共5页
Pytorch深度学习者必备技能教程(五)_第4页
第4页 / 共5页
Pytorch深度学习者必备技能教程(五)_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Pytorch深度学习者必备技能教程(五)》由会员分享,可在线阅读,更多相关《Pytorch深度学习者必备技能教程(五)(5页珍藏版)》请在金锄头文库上搜索。

1、搭建网络思路:mnist数据集下载与处理搭建神经网络损失函数与优化函数的选择定义可视化函数(不是本文的重点)模型训练以及结果图像绘制模型测试结果可视化与结果分析代码实现1. 导入需要用到的安装包与模块:这里我么直接使用Pytorch自带的mnist数据集,所以要用到torchvision安装包。fromtorch.utilsimportdatafromtorchvisionimportdatasets,transformsfromtorch.nnimportSequential,Conv2d,ReLU,MaxPool2d,Linear,CrossEntropyLossfromtorch.opt

2、imimportAdamfromtorch.autogradimportVariablefrommatplotlibimportcm,pyplotaspltfromsklearn.manifoldimportTSNE#将最后一层的输出降维处理,方便结果的可视化importtorch.nnasnnimporttorchimportos2. mnist数据集下载与处理:直接下载下来的mnist数据集并不符合输入给网络的格式,所以我们需要对数据集做一些处理,以满足模型训练的要求。由于小编电脑配置较低,测试数据量为1800张图片。LR=0.01BATCH_SIZE=32DOWNLOAD_MINIST=

3、FalseEPOCHS=1HAS_SK=True#创建数据集目录ifnotos.listdir(./model_datas/MnistDatasets/):DOWNLOAD_MINIST=True#训练数据集处理train_data=datasets.MNIST(root=./model_datas/MnistDatasets/,#数据集需要保存的路径train=True,#true:训练数据False:测试数据transform=transforms.ToTensor(),#将PIL.Image或numpy.ndarray数据转换为形状为torch.FloatTensor(CxHxW),同时

4、归一化download=DOWNLOAD_MINIST#下载数据集,如果有,就直接加载,如果如果没有,就去下载)#将输入图片的shape转化为(50,1,28,28)data_loader=data.DataLoader(dataset=train_data,batch_size=BATCH_SIZE,shuffle=True,)test_data=datasets.MNIST(root=./model_datas/MnistDatasets/,train=False,)test_x=torch.unsqueeze(test_data.test_data:1800,dim=1).type(to

5、rch.FloatTensor)/255.#将测试数据的输入shape由原来的(10000,28,28)转化为(10000,1,28,28)并且将输出数据归一化test_y=test_data.test_labels:1800#提取测试数据的标签值3. 搭建神经网络:将模型数据预处理完之后,接下来才是我们这篇文章的重点,搭建一个卷积神经网络。输入层数据格式:32,1,28,28第一卷积层:卷积层:shape32,1,28,2832,16,28,28这里的卷积层只是将原来的通道数由1变为16,图片大小没有变化激活层:这里我们选择Relu作为激活函数对卷积层输出的数据进行去线性。池化层:shape

6、32,16,28,2832,16,14,14池化层不改变通道数,只改变图片的大小第二卷积层:卷积层:shape32,16,14,1432,32,14,14这里的卷积层只是将上一层池化层输出的通道数由16变为32,图片大小没有变化激活层:选择Relu作为激活函数对卷积层输出的数据进行去线性。池化层:shape32,32,14,1432,32,7,7池化层不改变图片通道数,只改变图片的大小全连接层:数据降维处理:32,32,7,732,32*7*7首先将第二卷积层池化层的输出降维处理为全连接层可以接收的数据格式全连接层:shape32,32*7*732,10将降维处理完的数据格式作为全连接层的输入

7、,使用一个32*7*7,10的权重,将结果输出;具体的网络结果如下图所示:classCNN(nn.Module):def_init_(self):super(CNN,self)._init_()self.conv_1=Sequential(#第一卷积层Conv2d(in_channels=1,out_channels=16,kernel_size=5,stride=1,padding=2),ReLU(),MaxPool2d(kernel_size=2)#最大池化层)self.conv_2=Sequential(#第二卷积层Conv2d(in_channels=16,out_channels=3

8、2,kernel_size=5,stride=1,padding=2),ReLU(),MaxPool2d(kernel_size=2)#最大池化层)self.out=Linear(32*7*7,10)#全连接层defforward(self,x):conv_1=self.conv_1(x)conv_2=self.conv_2(conv_1)fcl_input=conv_2.view(conv_2.size(0),-1)fcl_output=self.out(fcl_input)returnfcl_output,fcl_inputcnn=CNN()4. 损失函数与优化函数搭建完神经网络之后,接下

9、来就需要选择目标函数和优化函数了。对于分类问题,一般使用交叉熵(Cross-Entropy)作为损失进行最小优。而对于优化函数,这里选择Adam是在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。optimizer=Adam(cnn.parameters(),lr=LR)loss_func=CrossEntropyLoss()5. 定义可视化函数:这里定义这个函数主要是为了将最终的分结果展示出来,方便理解。本文的重点是神经网络,对于结果展示代码看不懂就直接忽视。defplot_with_labels(lowDWeights,labels):!主要是将测试结果进行可视化。:p

10、aramlowDWeights:进行降维处理后的测试集标签值:paramlabels:原测试集的标签值!plt.cla()X,Y=lowDWeights:,0,lowDWeights:,1forx,y,sinzip(X,Y,labels):c=cm.rainbow(int(255*s/9)plt.text(x,y,s,backgroundcolor=c,fontsize=9)plt.xlim(X.min(),X.max()plt.ylim(Y.min(),Y.max()plt.title(Visualizelastlayer)plt.savefig(./model_datas/pictures

11、/cnn.png)plt.pause(O.l)5.模型训练以及结果图像绘制:将之前处理好的mnist数据集输入到搭建好的神经网络里面进行模型训练以及绘制测试结果的可视化。forepochinrange(EPOCHS):forstep,(b_x,b_y)inenumerate(data_loader):batch_x,batch_y=Variable(b_x),Variable(b_y)pred_y=cnn(batch_x)0loss=loss_func(pred_y,batch_y)optimizer.zero_grad()loss.backward()optimizer.step()ifst

12、ep%50=0:test_output,last_layer=cnn(Variable(test_x)test_y_pred=torch.max(test_output,l)l.data.squeeze().numpy()accuracy=float(test_y_pred=test_y.numpy().astype(int).sum()/float(test_y.size(0)print(epoch:,epoch,|step:,step,|train_loss:,loss.data.numpy(),|test_acuracy:%.2f%accuracy)ifHAS_SK:#数据降维并且可视化

13、tsne=TSNE(perplexity=30,n_components=2,init=pca,n_iter=5000)plot_only=500low_dim_embs=tsne.fit_transform(last_layer.data.numpy():plot_only,:)#将输出数据降维labels=test_y.numpy():plot_onlyplot_with_labels(low_dim_embs,labels)#调用此函数,将数据传入并且展示出来plt.ioff()#printl0predictionsfromtestdatatest_output,_=cnn(test_x

14、:l0)pred_y=torch.max(test_output,l)l.data.squeeze().numpy()print(pred_y,predict_number)print(test_y:l0.numpy(),realnumber)6. 模型测试结果可视化与结果分析:为了更形象说明搭建的神经网络对mnist数据集分类结果准确性,这里将每次训练与测试结果的对应的准确度和损失值的变化、分类结果的图像两个方面来分析。epyLi1Ilidlll_Lj.廿snepoch:0Istepi1400Irrain_loss:0.16652842epoch:0Istep:1450Itrain.Loss:9.0314965epoch:0Istep:1500Itrain_loss;9.00162366epochs0step:1550Iti.n_Joss;0.03336678epoch:0Istepr1600Itrain_loss:0.00505453epoch:0Istep:165G|train_loss:0.SG195481Iepoch:0|step:1700Ntrainloss:0.0S165379JItestacuracy:0.97Itestacuracy:GL97Itestacuracy:Itpst_acurcy:0.97ILestacuracy:0.97

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号