《PyTorch深度学习实践》学习笔记 【5】CNN_1
十、CNN 1
10.1 卷积神经网络的基本结构
卷积神经网络=特征提取+分类
10.1.1 特征提取
特征提取器,通过卷积运算,找到某种特征。由卷积层convolution和下采样Subsampling 构成。
一个图像,丢到一个卷积层里面仍然是一个3维的张量;
下采样,通道数不变,但是图片的宽度和高度变小(减少维数数量,减少计算量)
10.1.2 分类器
将特征向量化后,用全连接网络进行来分类。
10.2 Convolution (卷积层)
10.2.1 背景知识
RGB:
栅格图:按照像素格保存图像,每个像素格里面保存度值,如果是彩色图,每个格子里就是RGB三个通道的灰度。
矢量图:根据描述来绘制
10.2.2 卷积的运算过程
卷积核能够输出一层
- 卷积核数量=最终输出的通道数
约定的画法:
-
卷积核的通道数量 = 输入通道数 (三通道输入—卷积核也有三个通道)
-
卷积核的总数= 输出通道的数量 (M通道输出-- 卷积核(filter)有M个)
卷积核的大小自己定
卷积层对图像的大小没有要求,只对通道数有关。所以定义一个卷积层只需要定义:1. 输入通道,2. 输出通道数,3. 卷积核数;
conv_layer = torch.nn.Conv2d(in_channels,
out_channels,
kernel_size=kernel_size)
-
Padding的圈数: M/2 圈 (比如M=3 , padding 3/2 = 1 圈; M=5, padding 5/2 = 2 圈)
例如,对于一个5×5的原图,若想使用一个3×3的卷积核进行卷积,并获得一个同样5×5的图像,则需要进行Padding,通常外围填充0
10.3 Maxpooling 池化层
对于一个M*M的图像而言,被分割成大小相同的块,每个块的值取块内最大值,称为MaxPooling; (用均值就是AveragePooling)
通过池化层可以有效减小宽度和高度
只是缩小图片的宽度和高度,不改变通道数
10.4 简例
- 卷积层Conv2d Layer和 池化层Pooling Layer 对 输入图像的大小没有要求(因为做的是简单的运算都能处理)
- 全过程中图像大小影响最大的是最后传入分类器的维度(传入的是向量,长度与图像大小有关)
10.4.1 模型:
10.4.2 代码:
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = torch.nn.Conv2d(1, 10, kernel_size