PyTorch卷积神经网络模型初建

Posted 刘小怪tt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorch卷积神经网络模型初建相关的知识,希望对你有一定的参考价值。

    最近自己配置深度学习的各种框架,硬盘空间都快装满了,windows的环境配置着实是太麻烦了PyTorch卷积神经网络模型初建PyTorch卷积神经网络模型初建



    卷积神经网络可以算是深度神经网络中很流行的网络了。本文从基础入手,介绍了卷积网络的基本原理以及相关的其它技术,并利用卷积网络做了一个简单项目作为示例参考。想入手 CNN 的朋友不可错过~


    卷积神经网络之所以优于其它深度神经网络是由于它特殊的操作。相比一次只计算图像中的单个像素,CNN 将多个像素的信息组合在一起,因此能够理解时间模式。
    另外,CNN 可以「看到」一组像素组合成一条直线或者曲线。由于深度神经网络通常都是多层卷积的堆叠,通过上一层得到了直线或者曲线后,下一层不再组合像素,而是将线组合成形状,一层一层进行下去,直到形成完整的图片。




深度学习建模过程:

(1)下载或者制作数据集

(2)数据读取、清洗

(3)数据增强、特征工程

(4)建立神经网络/下载效果好的训练好的模型

(5)进行学习根据metrics和loss评价模型准确度

(6)调整参数重新学习直到达到比较不错的标准

使用fastai来进行这一切:

 # 使用jupyternotebook进行试验  %matplotlib inline # 若引用的库有更新会自动更新 %reload_ext autoreload %autoreload 2  # import * 对于编程人员来说会有点难以接受,主要目的是方便实验 from fastai import * from fastai.vision import * # 不怕不会,怕不知道怎么学,在进行一切之前,首先要学会如下: doc(get_transforms()) # 获得该方法的文档,学会使用该方法 # 使用上面的方法结合访问官方文档介绍网站来进行学习,官方文档url文中最开始有提供。  ''' 首先获得数据集 ''' # 1.示例中的数据为PETS,是一个用来进行猫狗品种分类的数据集。 path = untar_data(URLs.PETS) # 该方法首先下载数据集到目录中,再进行解压,返回解压路径 print(path) # 打印path,其为下载的目录 print(path.ls()) # 看看解压路径中的文件 paths_img = path/'images' # 该路径为图像文件路径,也就是真正的建模数据集 images = get_images_files(paths_img) # 该方法为获取路径中的所有文件 print(images[:5])  # 2.加载路径中的数据集 pat = r'/([^/]+)_d+.jpg$' # 用于匹配图片名字的表达式 tfms = get_transforms() # 这个用来进行数据增强 data = ImageDataBunch.from_name_re(paths_img, images, pat=pat, ds_tfms=tfms, size=224, bs=32) # 该方法使用数据加载对象ImageDataBunch的from_name_re(使用正则匹配文件名称的方法),进行数据读取。 data.show_batch(rows=3, figsize=(6,8)) # 看看数据的样子 print(data.c) # 打印数据集中的分类数量 data.normalize(imagenet_stats) # normalize图像,消除因为激活函数而可能发生的梯度爆炸和梯度消失情况,加快梯度下降,很有用,详细内容请看文章开始提供的pytorch教学链接里面关于BN(batch_normal)的视频  # 3.进行神经网络建模和学习  ''' 神经网络训练,可以概括为如下步骤: 1.建立神经网络模型,预先训练好的比较好,表达能力更强 2.查找合适的学习率进行学习 3.进行学习(该步骤其实为迁移学习:使用pretrained模型加上自己的分类,然后进行学习) 4.保留当前状态 5.unfreeze:解冻模型所有权重,准备 6.查找合适的学习率。 7.再次进行学习,(进行fine tune:微调,在原有模型上加上自己的最后fully connection layer,然后进行所有权重训练。) '''  learn = create_cnn(data, models.resnet34, metrics=fastai.metrics.accuracy) # 该方法建立了一个resnet34网络结构的CNN网络,在训练中打印metrics对应的方法来展示精度,注意:metrics不影响训练精度。 learn.lr_find() # 查找合适的学习率 learn.recorder.plot() # 绘制y轴为loss,x轴为学习率的图像 # 学习率应该选择loss向下降程度最大点所对应的学习率 learn.fit_one_cycle(4, slice(lr)) # 进行训练,4为epoch数,slice(lr)是学习率范围 learn.save('stage_1', return_path=True) # 保存第一阶段迁移学习的参数,return_path=True是打印保存目录 learn.unfreeze() # 该方法为解冻所有权重 learn.lr_find() learn.recorder.plot() learn.fit_one_cycle(5, slice(lr)) # 开始fine tune,该lr为上面一步图像中下降最快的点对应的lr learn.save('stage_2') # 保存第二阶段fine tune的参数  # 4.查看分类错的数据都是哪些 interp = ClassificationInterpretation.from_learner(learn)  losses,idxs = interp.top_losses() # 查找分类错误的图像的索引 interp.plot_top_losses(9, figsize=(15,11)) # 打印出分类错误的图像  # 5.分类一个试试 img = open_image(images[0]) label, idx, probability = learn.predict(img) print('预测的分类为{}, 概率为{:.4f}'.format(label, probability[idx]))  # 至此完成了深度学习的建模







PyTorch卷积神经网络模型初建PyTorch卷积神经网络模型初建PyTorch卷积神经网络模型初建PyTorch卷积神经网络模型初建



以上是关于PyTorch卷积神经网络模型初建的主要内容,如果未能解决你的问题,请参考以下文章

动手学pytorch-经典卷积神经网络模型

pytorch Vgg网络模型

pytorch Vgg网络模型

用PyTorch构建基于卷积神经网络的手写数字识别模型

[Pytorch系列-40]:卷积神经网络 - 模型的恢复/加载 - 搭建LeNet-5网络与MNIST数据集手写数字识别

[Pytorch系列-41]:卷积神经网络 - 模型参数的恢复/加载 - 搭建LeNet-5网络与MNIST数据集手写数字识别