下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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数据转换为形状为tor
4、ch.FloatTensor(CxHxW),同时归一化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(tes
5、t_data.test_data:1800,dim=1).type(torch.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,28>>>>32,16,28,28这里的卷积层只是将原来的通道数由1变为16,
6、图片大小没有变化激活层:这里我们选择Relu作为激活函数对卷积层输出的数据进行去线性。池化层:shape32,16,28,28>>>>32,16,14,14池化层不改变通道数,只改变图片的大小第二卷积层:卷积层:shape32,16,14,14>>>>32,32,14,14这里的卷积层只是将上一层池化层输出的通道数由16变为32,图片大小没有变化激活层:选择Relu作为激活函数对卷积层输出的数据进行去线性。池化层:shape32,32,14,14>>>>32,32,7,7池化层不改变图片通道数,只改变图片的大小全连接层:数
7、据降维处理:32,32,7,7>>>>32,32*7*7首先将第二卷积层池化层的输出降维处理为全连接层可以接收的数据格式全连接层:shape32,32*7*7>>>>32,10将降维处理完的数据格式作为全连接层的输入,使用一个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,kerne
8、l_size=5,stride=1,padding=2),ReLU(),MaxPool2d(kernel_size=2)#最大池化层)self.conv_2=Sequential(#第二卷积层Conv2d(in_channels=16,out_channels=32,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
9、_1)fcl_input=conv_2.view(conv_2.size(0),-1)fcl_output=self.out(fcl_input)returnfcl_output,fcl_inputcnn=CNN()4. 损失函数与优化函数搭建完神经网络之后,接下来就需要选择目标函数和优化函数了。对于分类问题,一般使用交叉熵(Cross-Entropy)作为损失进行最小优。而对于优化函数,这里选择Adam是在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。optimizer=Adam(cnn.parameters(),lr=LR)loss_func=CrossEntropy
10、Loss()5. 定义可视化函数:这里定义这个函数主要是为了将最终的分结果展示出来,方便理解。本文的重点是神经网络,对于结果展示代码看不懂就直接忽视。defplot_with_labels(lowDWeights,labels):!主要是将测试结果进行可视化。:paramlowDWeights:进行降维处理后的测试集标签值: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,backgrou
11、ndcolor=c,fontsize=9)plt.xlim(X.min(),X.max()plt.ylim(Y.min(),Y.max()plt.title('Visualizelastlayer')plt.savefig("./model_datas/pictures/cnn.png")plt.pause(O.l)5.模型训练以及结果图像绘制:将之前处理好的mnist数据集输入到搭建好的神经网络里面进行模型训练以及绘制测试结果的可视化。forepochinrange(EPOCHS):forstep,(b_x,b_y)inenumerate(data_loa
12、der):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()ifstep%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.n
13、umpy().astype(int).sum()/float(test_y.size(0)print("epoch:",epoch,"|step:",step,"|train_loss:",loss.data.numpy(),"|test_acuracy:%.2f"%accuracy)ifHAS_SK:#数据降维并且可视化tsne=TSNE(perplexity=30,n_components=2,init='pca',n_iter=5000)plot_only=500low_dim_embs=ts
14、ne.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:l0)pred_y=torch.max(test_output,l)l.data.squeeze().numpy()print(pred_y,"predict_nu
15、mber")print(test_y:l0.numpy(),"realnumber")6. 模型测试结果可视化与结果分析:为了更形象说明搭建的神经网络对mnist数据集分类结果准确性,这里将每次训练与测试结果的对应的准确度和损失值的变化、分类结果的图像两个方面来分析。epyLi1'Ilidlll_Lj.廿snepoch:0Istepi1400Irrain_loss:0.16652842epoch:0Istep:1450Itrain.Loss:9.0314965epoch:0Istep:1500Itrain_loss;9.00162366epochs0ste
16、p:1550It"i.n_Joss;0.03336678epoch:0Istepr1600Itrain_loss:0.00505453epoch:0Istep:165G|train_loss:0.SG195481Iepoch:0|step:1700Ntrainloss:0.0S165379JItestacuracy:0.97Itestacuracy:GL97Itestacuracy:Itpst_acur<cy:0.97ILestacuracy:0.9711estacuracy:0r97石cur且cv/图一:损失与准确度Vi&ualelayer图二:测试结果的可视化图图一我们可以看到,模型训练初期,训练数据的损失值和测试的准确度都不能满足我们的要求,但随着
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年湖南省永州市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2023年吉林省通化市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2024年湖北省荆州市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2022年云南省文山自治州公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2023-2024学年梅州市高一语文(下)期末考试卷(附答案解析)
- 2024房屋转租合同范本经典
- 2024深圳建筑行业劳动合同范本及安全生产协议2篇
- 2024版室内外清洁作业承揽协议版
- 2024施工协议书范文:跨海大桥建设施工合作3篇
- 2024版出租车买卖合同协议书范文
- 2024-2025学年深圳市初三适应性考试模拟试卷历史试卷
- 广东省深圳市2023-2024学年高一上学期期末考试物理试题(含答案)3
- 16J914-1 公用建筑卫生间
- 《财务共享实务》课程期末考试题库及答案
- 大型储罐吊装方案
- “千师访万家”家访记录表(共2页)
- 海拔高度与气压、空气密度、重力加速度对照表
- 《青田石雕》教学设计
- (精选)有限空间作业安全监理实施细则
- 110KV电网线路继电保护课程设计
- 物业管理--极致物业管理软件收费管理操作手册
评论
0/150
提交评论