第10讲 卷积神经网络(基础篇)Basic CNN
pytorch学习视频——B站视频链接:《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili
以下是视频内容笔记以及小练习源码,本节代码有点多,另外单独写的代码——pytorch 深度学习实践 第10讲 卷积神经网络(基础篇)_代码
以下笔记纯属个人理解,如有错误欢迎路过的大佬指出 。
1. 基本概念
-
全连接网络
- 全连接层:像前几节中的用到的线性层那样的网络层,称为全连接层。也就是线性层中的每一个输入结点都会参与下一层任何一个输出结点的计算上,这样的线性层叫做全连接层。
- 如果整个网络都是用这种全连接层连接在一起的,那就称为全连接网络。
-
卷积神经网路
直接对图像进行操作,保留了更多的空间特征,前面卷积和采样的部分称为特征提取,后面全连接部分称为分类。
2. 卷积层
使用RGB图像,输入通道是3,输出通道是卷积核的数量
卷积公式:
y
(
t
)
=
∫
−
∞
∞
x
(
p
)
h
(
t
−
p
)
d
p
=
x
(
t
)
∗
h
(
t
)
y(t)=\int_{-\infty}^{\infty} x(p) h(t-p) d p=x(t) * h(t)
y(t)=∫−∞∞x(p)h(t−p)dp=x(t)∗h(t)
-
多通道卷积如何操作
每个通道单独与一个卷积核进行卷积,图像通道数为3的话,每一个卷积核对应的通道数也是3,然后将这三个卷积核分别与图像的R G B通道图像求卷积,最后再将求得的结果相加得到最终的卷积结果。如图所示。
-
一个拥有三个通道的输入图像在经过卷积处理之后变成了单通道的输出图像
-
图像的通道、高度、宽度变化如图所示。
卷积核的通道数与输入图像通道数相等,最终得到的是一个单通道的新图像。
-
得到m个通道的输出图像
使用m个卷积核可以得到m个图像,将这些图像拼接在一起即可得到一个 m × W ′ × H ’ m×W'×H’ m×W′×H’的输出图像
-
-
卷积核的形状是一个4维张量
将上述卷积核拼接起来就组成了一个4维张量,m是卷积核的个数,n是卷积核通道数,最后两维是宽和高。结构如图所示:
3. 卷积层参数解析
-
padding=1
在输入图像上填充0使输入图像在做完卷积之后与原图像大小一样,如图所示
见代码padding.py -
stride=2(步长为2)
卷积核每次移动两个位置,如图所示
4. 下采样
maxpooling最大池化,效果如图所示:
经过池化层操作后,通道数不变。
见代码maxpooling.py
5. 卷积神经网络
-
一个简单的例子
输入图像(batch, 1, 28, 28)——> 输出(batch, 10)
中间经过一个卷积——一个池化——一个卷积——一个池化——全连接层 这些过程,图像的通道数和高度宽度变化如图所示:
-
实现
结构如图所示:
参考代码cnn.py模型设计部分 。
使用mnist数据集训练和测试,结果: