五种经典卷积神经网络
一、CNN基础
1.1 理论基础
CNN的理论基础主要包括个方面:感受野、卷积计算、全零填充、批标准化、池化、舍弃。
(1)感受野
神经网络在卷积计算中,常使用两层33卷积核。
(2)卷积计算
输入特征图的深度(channel数),决定了当前层卷积核的深度;当前卷积核的个数,决定了当前层输出特征图的深度。如果某层特征提取能力不足,可以在这一层多用几个卷积核提高这一层的特征提取能力。卷积就是利用立体卷积核实现参数共享。
(3)全零填充
卷积计算保持输入特征图的尺寸不变,可以在输入特征图周围进行全零填充。
不填充时,输出特征图边长=(输入特征图边长-卷积核长+1)/步长。
TF描述卷积层:
(4) 批标准化
缩放因子 γ\beta ,同模型其他参数一起进行训练。通过缩放因子和偏移因子,优化了特征数据分布的宽窄和偏移量,保证了网络的非线性表达力。
(5) 池化
池化为了减少特征数据量,池化主要有两种:最大池化和平均池化。最大池化提取图片纹理,均值池化保留背景特征。
TF描述池化:
(6) 舍弃
为了缓解过拟合,常把隐藏层的部分神经元按照一定比例从神经网络中临时舍弃。在使用神经网络时,再把神经元恢复到神经网络中。
卷积神经网络就是借助卷积核对输入特征进行特征提取,再把提取到的特征送入全连接网络进行识别预测。卷积就是特征提取器,主要包括卷积Convolutional、批标准化BN、激活Activation、池化Pooling和舍弃,即CBAPD,最后送入全连接网络。
1.2 base-CNN
利用Cifar10数据集,搭建base版本的CNN。C
ifar10数据集说明:
3232像素点的十分类彩色图片和标签,其中5万张用于训练,1万张用于测试。
CNN搭建示例:6个55的卷积核,步长为1;2个22的池化核,步长为2。利用CBAPD搭建网络:
整体代码如下,将作为下面介绍五种经典CNN的base版本,只替换对应的网络结构即可。
import tensorflow as tf
import os
import numpy as np
from matplotlib import pyplot as plt
from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation, MaxPool2D, Dropout, Flatten, Dense
from tensorflow.keras import Model
- 1
- 2
- 3
- 4
- 5