10_2_卷积神经网络&池化与采样
2D Convolution
共享变量w、滑动窗口
接下来将卷积网络计算的具体流程
Kernel size
1个通道
多个通道:利用不同的w,3个w。
输入的c要与核的c保持一致。【b,5,5,c】与【c,3,3】
3个通道分别计算出结果后,再累加。得到【b,3,3,1】
2D Convolution
多个通道-》一个通道
Padding & Stride
需求:希望h’=h, w’=w。-》需要padding,上下左右都扩大一点。
Stride:步长,移动窗口的间隔数。完成降维操作。6*6-》3*3,间隔数为2则除以2。
Channels
N个核 【N,c,3,3】,得到【b,3,3,N】
N为个数通道,N决定输出的通道数;c叫做输入的c通道(input-c),c由输入的c决定。
多通道输入3,多通道输出4
输入【b,32,32,3】;w【4,3,5,5】;b【4】
每个b在每个输出的运算时是1个的,在1个核都用这个b来运算xw…xw+b。
结果为【b,30,30,4】
并且在输出之前还可以进行padding(放大原输入使输出的维度与原输入相等)或者stride(成倍缩小)
For instance
多通道输入和多通道输出
padding为上下左右各打一个补丁(padding)
LeNet-5
最早的卷积神经网络
subsamping为下采样,取小方块中最大的值,并且维度会减半(与stride功能相同)
Pyramid Architecture(堆叠结构,金字塔结构)
从底层特征,到高层特征的逐层提升的过程。
1次=1个Convolution和1个Subsampling(C+S)。慢慢可以抽取到高层的概念。
layers.Conv2D
具体的tensorflow实例
layers.Conv2D(4,kernel_size=5,strides=1,padding='valid')
-
4为N,决定输出output的channel数量
-
kernel_size 决定窗口是5*5,c是自动由输入决定的
注:kernel_size小一点,可能输出的维度会大一点;否则相反
注:tensorflow内部不一定是以【N,3,5,5】格式存储的,可能是【5,5,3,N】
-
stride,等于2会直接把输出的维度减半
-
padding,valid表示不padding,same表示输出与输入的维度相同
layer(x) = layer.call(x)。因为调用了__call__方法
weight & bias
w和b的格式存储方法
通过layer.kernel
和layer.bias
得到。
w由[5,5,c,N]的方式存储;b [4]
nn.conv2d
w,b由自己维护,适合底层研究
Gradient
For instance
由推导可得, O 00 O_{00} O00对 w 00 w_{00} w00是可以求导的。
池化与采样
Outline
- Pooling池化层
- upsample上采样层
- ReLU
Reduce Dim(下采样)
把28*28下采样成14*14
Max/Avg pooling
For instance
Max pooling常用一些
具体代码实现
upsample(上采样)
UpSampling2D
对图片放大,可视化时更容易地查看到物体
ReLU
把负的单元去掉(黑色的区域),变成灰的区域。