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