本文主要是介绍跟着刘二大人学pytorch(第---10---节课之卷积神经网络),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 0 前言
- 0.1 课程链接:
- 0.2 课件下载地址:
- 回忆
- 卷积
- 卷积过程(以输入为单通道、1个卷积核为例)
- 卷积过程(以输入为3通道、1个卷积核为例)
- 卷积过程(以输入为N通道、1个卷积核为例)
- 卷积过程(以输入为N通道、M个卷积核为例)
- Padding
- Padding(padding=1)
- 步长stride(stride=2)
- 下采样(Max Pooling Layer)
- 一个简单的例子
- 如果有GPU的话,代码如何改
- 结果
- 作业
0 前言
0.1 课程链接:
《PyTorch深度学习实践》完结合集
有大佬已经写好了笔记:大佬的笔记
pytorch=0.4
0.2 课件下载地址:
链接:https://pan.baidu.com/s/1_J1f5VSyYl-Jj2qIuc1pXw
提取码:wyhu
回忆
全连接
通道×宽×高
如果按全连接的话就破坏了原来的空间信息
下采样:通道数不变,目的是减少数据量,降低运算
构建一个神经网络之前首先考虑输入的张量的维度是什么,输出的张量维度是什么,使得卷积神经网络顺利先跑起来。
所有的卷积层+下采样合起来被称为:特征提取器(Feature Extraction),即找出某种特征。
接下来介绍卷积、下采样
通过下图直观的认识这两个东西
卷积
讲解卷积之前,先讨论一下图像是什么
在计算机领域遇到的图像都称为RGB图像,要表示一个像素,图片被分成一个一个单元格子,每个格子有一个颜色值,这样就构成一个图像,这样的图像被称为栅格图像,相机、显微镜在处理图像时
中学时学的一个东西叫光敏电阻,该电阻可以根据光照电阻发生变化.
通过多个个光敏电阻,做成一个阵列,每个光阻通过光阻都可以反映一个范围内的光的强度,通过光的强度与电阻之间的对应关系关系,可以画出阵列所反映的图,由电阻值转变为光的强度值,该图即为黑白图。
像素为2×2
光阻放的越多,得到的图片的像素越大,有的手机虚表像素值,是因为将没有的像素进行了插值,取临近的一些像素值的平均值,
1)红色传感器对红色波段比较敏感,R,红色传感器中的电阻值可以反应灰度级别,即到底有多红,用0-255中的值来定义灰度的级别,以下类似
2)蓝色传感器对蓝色波段比较敏感,G
3)绿色传感器对绿色波段比较敏感,B
由上即可将光阻值转变为彩色图像
下面的额小方格就是由红绿蓝传感器组成的阵列
因此我们遇到的图片一般是栅格图像,还有一类图像是矢量图,这种图描述方式不和栅格图像一样。
描述矢量图是描述圆心、直径、边是什么颜色,填充什么颜色(不重要)
拿到一个图像将使用三个通道来表示
图像的坐标系的介绍见我的另一篇文章:
卷积过程(以输入为单通道、1个卷积核为例)
数乘:对应元素想 乘
卷积过程(以输入为3通道、1个卷积核为例)
每一个通道配一个核,通道数=核的数量
上面画出来的三个红色的小方块儿对应为图像中的一个patch。
图像的一个patch与一个卷积核先数乘再相加,即下面红色框出来的大方框操作称为卷积
见下图
进一步表示:
卷积过程(以输入为N通道、1个卷积核为例)
上图中,一个卷积可以得到一个最终的通道为1的结果,如果再使用一个卷积核就可以得到另外一个通道为1的结果,以此延
卷积过程(以输入为N通道、M个卷积核为例)
由上图发现:
1)卷积核的个数和输入的通道数是一样的(这一句应该是写错了,应修改为:卷积核的通道数和输入的图片的通道数是一样的)
2)输出的通道数和卷积核的总个数是一样的(因此只要看到输出是多少个通道,上一步的卷积就有多少个卷积核)
由上图知:可以将m个卷积核可以拼成一个4维的张量
定义一个卷积层只需要关系4个值:
1、输入的通道数
:决定了卷积核的通道数
2、输出的通道
:决定了使用了多少个卷积核
3、卷积核的大小(宽和高)
:这个是必须的
卷积层的定义和输入图像的大小无关
Padding
Padding(padding=1)
torch.nn.Conv2d(输入的通道数,输出的通道数,kernel_size,padding,bias=False)
bias是偏置量
conv_layer.weight.data = kernel.data就是将定义的卷积核的张量数值给卷积层的权重
步长stride(stride=2)
通过以上的代码得到上面的结果
下采样(Max Pooling Layer)
这一层没有权重,通道数不会变
例如一个2×2的max pooling,则默认步长为2,
通过以下的代码得到上面的结果
一个简单的例子
用卷积、池化来代替之前的全连接
最后接的是交叉熵损失,所以不做激活
如果有GPU的话,代码如何改
1)模型迁移到GPU
cuda:0,表示使用第一块显卡,cuda:1表示使用第二块显卡
model.to(device):指的是将模型的参数、缓存、所有的模块,都放到cuda里面,都转成相应的tensor,所有涉及的权重都放进显卡里面,此时将把之前在cpu上定义模型、权重全部迁移到GPU上面
2)计算时把数据迁移到GPU
把要计算的张量迁移到GPU上面,主要是输入和输出
注意要将数据迁移到的显卡要和模型所要迁移的显卡要一致
训练部分需要加
测试部分也需要加上
结果
作业
比较不同配置对应的网络的性能。
这篇关于跟着刘二大人学pytorch(第---10---节课之卷积神经网络)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!