10-卷积神经网络
导论
卷积主要用于进行空间变换;卷积神经网络的用途是为了自动提取特征。

对图像进行卷积操作,本质上是对图像的某块的所有频道(即一个Batch)进行操作。操作会改变图像的$c,w,h$值。

通道
单通道
用Kernel阵遍历输入阵,对应进行数值乘法再求和,得到输出阵的一个元素。
图中的红色框称为“窗口”,而其特性就是滑动;进行卷积对应相乘运算并求得均值后,滑动窗便开始向右边滑动并根据步长的不同选择滑动幅度。


$\cdots$

3通道
本质上是将单通道的卷积累加。需要注意的是,输入Kernel的通道数要和输入的通道数相等。该操作将3通道的输入转化成1通道的输出。


n通道

如果需要得到$m$通道的输出,则要准备$m$份的卷积阵。此时对应的权值是 $m_n_k_{width}*k_{height}$的四维量。

卷积层


输出的维度:$n_{in}-kernel+1$
特征图
经过一系列卷积对应相乘,求均值运算后,把一张完整的feature map填满。

feature map是每一个feature从原始图像中提取出来的“特征”。其中的值,越接近为1表示对应位置和feature的匹配越完整,越是接近-1,表示对应位置和feature的反面匹配越完整,而值接近0的表示对应位置没有任何匹配或者说没有什么关联。
一个feature作用于图片产生一张feature map,对这张图来说,用的是3个feature,因此最终产生3个 feature map。

padding
padding,即边缘填充,可以分为四类:零填充,常数填充,镜像填充,重复填充。

以低光照增强任务为例,最终对比效果如下图。零填充会产生边缘伪影,而镜像填充很好地缓解了这一效应。

步长
也就是窗口移动的步福,比如设置步长为2:



池化层
卷积操作后,得到了一张张有着不同值的feature map,尽管数据量比原图少了很多,但还是过于庞大(比较深度学习动不动就几十万张训练图片),因此接下来的池化操作就可以发挥作用了,它最大的目标就是减少数据量。
池化分为两种:Max Pooling 最大池化、Average Pooling平均池化。顾名思义,最大池化就是取最大值,平均池化就是取平均值。
Max Pooling Layer

在
pytorch中MaxPool2d中的stride默认值为2。
Average Pooling Layer
一个简单的卷积神经网络

将全连接神经网络改写成卷积神经网络:

如何使用GPU
迁移模型到GPU
用来选择设备
将模型数据迁移到GPU上
迁移张量到GPU
通过使用.to(device)将数据迁移到GPU上
作业1

高级篇
回顾


在这张图片会发现很多重复的,在构造时很复杂,为了减少代码冗余,可以定义为函数或者类。

Inception Module:类似于套娃,重复使用的部分定义为一个模型。
Inception Module

初衷是由于kernel_size不知道定义多少合适,于是把全部需要的kernel_size都定义了,类似于一个权重选取。其中Concatenate是将这些模块沿着通道拼接在一起。
什么是1X1 convolution

$1\times 1$卷积能够跨越不同通道,进行信息融合。

使用$1\times 1$的卷积能够降低运算量。
Inception module


使用Inception Module
其中,self.linear = torch.nn.Linear(1408,10)的1408可以通过代码计算,先跑一遍,计算x的大小即可。
结果
深残余学习

在神经网络中,由于深度学习可能会设置很多层,这样可能会导致梯度消失,为了避免这种情况,一般采用relu激活函数。
Residual Network

简单的残差网络

定义残差网络

定义网络
配置参数
训练与测试
作业2
复现论文1
论文:Identity Mappings in Deep Residual Networks.
复现论文2
论文:Densely Connected Convolutional Networks[J].
学习目标
扩充理论知识,比如“圣经”
阅读
pytorch文档,便于写代码复现经典工作(写代码与读代码是一个循环,跑代码只是证明环境配置成功了)
扩充视野
扩展阅读
CNN:https://zhuanlan.zhihu.com/p/27908027
最后更新于
这有帮助吗?
