这是我看过讲解CNN最详细,最清楚的视频,特色是理论和pytorch代码相结合:刘二大人的视频。
首先需要从整体上理解CNN网络
- 图像输入计算机就是一个矩阵
- 将一个图像(input),通过卷积(Convolution)、下采样(Subsampling、又叫池化Pooling,)、卷积和池化操作可以进行多次,然后接入全连接网络进行分类判断。
- 图像的输入是通道 * 宽 * 高: ,即
-
黑白图像的输入channel是1,彩色图片的输入channel是3
理解卷积的计算过程
我们从单通道输入开始
- Kernel是我们常说的卷积核,用卷积核在输入图像上滑动,通过数字乘法,计算一个输出。
- 最后我们从得到了(这里的1就是通道)
单通道输入的计算已经清楚,那怎么计算多通道输入呢?
- 简单来说就是用多个卷积核分别计算,然后求和
- 输入图像有三个channel,每个channle的尺寸为 。
- 卷积核有三个channel,每个channel的尺寸为。
- 输出只有一个channel,大小是。
- 简单的说我们就是将一个 的输入通过一个的卷积核,计算得到一个的结果
那么如何输入得到输出?
- 一个卷积核(filter)的大小是:
- 每个卷积核的channel和输入数据的channel一致
- 加入个卷积核分别计算,就可以得到个结果,然后将这和结果拼接
- 总结:卷积核的channel和输入channe保持一致,卷积核的数量和输出channel保持一致
padding
-
就是给输入周围添加0,调整输出的大小
stride
-
控制滑动时跳跃的距离
MaxPooling
-
最大池化,就是找其中的最大值
- 还有一个avgPooling,即平均池化,就是计算平均值。