tensorflow 笔记
神经网络八股功能扩展
-
自制数据集,解决本领域应用
-
数据增强,扩充数据集
- 数据增强可以帮助扩展数据集,对图像的增强就是对图像的简单形变,用来应对因拍照角度不同引起的图片变形
-
断点续训,存取模型
-
参数提取,把参数存入文本
-
acc/loss可视化,查看训练效果
-
应用程序,给图识物
用CNN实现离散数据的分类(以图像分类为例)
1.卷积计算过程
- 卷积计算可认为是一种有效提取图像特征的方法
- 一般会用一个正方形的卷积核,按指定步长,在输入特征图上滑动,遍历输入特征图中的每个像素点。每一个步长,卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项得到输出特征的一个像素点。
- 输入特征图的深度(channel数),决定了当前层卷积核的深度;
- 当前层卷积核的个数,决定了当前层输出特征图的深度。有n个卷积核会有n个输出特征图,n其他n-1个输出特征图会叠加在它的后面
2.感受野
-
感受野:卷积神经网络各输出特征图中的每个像素点,在原始输入图片上映射区域的大小;
-
现在神经网络在卷积计算中常使用两层3x3卷积核替换一层5x5卷积核,是因为
两层3x3卷积核的参数量是9+9=18,而5x5的卷积核的参数量是25
当x>10时,两层3x3卷积核优于一层5x5卷积核
- 自己的理解是:最终的单元1x1卷积核在原始输入特征图上滑动:水平*竖直
3.全零填充
-
卷积计算保持输入特征图的尺寸不变可以使用全零填充,在输入特征图的周围填充零
-
TF描述全零填充
用参数padding=‘SAME’-》使用全零填充或padding='VALID’表示-》不使用全零填充
SAME (全零填充)输出特征图尺寸=入长/步长(向上取整){例如2.3取整3}
VALID(不全零填充)输出特征图尺寸=(入长-核长+1)/步长(向上取整)
-
4.TF描述卷积计算层
tf.keras.layers.Conv2D(
filters=卷积核个数,
kernel_size=卷积核尺寸,#正方形写核长整数,或(核高h,核宽w)
strides=滑动步长,#横纵向相同写步长整数,或(纵向步长h,横向步长w),默认1
padding=“same"or"valid”,#使用全零填充是“same”,不使用是“valid"(默认)
activation="relu"or"sigmoid"or"tanh"or"softmax"等,#如有BN此处不写
input_shape=(高,宽,通道数)#输入特征图维度,可省略
)
model=tf.keras,models.sequential([
Conv2D(6,5,padding='valid',activation='sigmoid'),
MaxPool2D(2,2),
Conv2D(6,5,padding='valid',activation='sigmoid'),
MaxPool2D(2,(2,2)),
Conv2D(filters=6,kernel_size=(5,5),padding='valid',activation='sigmoid'),
MaxPool2D([pool_size=(2,2),strides=2),
Flatten(),
Dense(10,activation='softmax') ])
5.批标准化
批标准化BN(Batch Normalization)
随着网络层数的增加,特征数据会出现偏离0均值的情况
使数据回归标准正态分布,常用于卷积操作和激活操作之间
-
标准化:使数据符合0均值,1为标准差的分布。
-
批标准化:对一小批数据(batch),做标准化处理。
-
μ和σ就是对第k个卷积核计算出来的batch张输出特征图中的所有像素点求均值和标准差。
BN操作将原本偏移的特征数据重新拉回到0均值使进入激活函数的数据分布在激活函数的线性区
model=tf.keras.models.sequential([
Conv2D(filters=6,kernel size=(5,5),padding='same'),#卷积层
BatchNormalization(),#BN层
Activation('relu'),#激活层
MaxPool2D(pool_size=(2,2),strides=2,padding='same'),
Dropout(0.2),#dropout层
])
- 为每个卷积核引入可训练参数γ核β,调整批归一化的力度。
- 但是这种简单的特征数据标准化使特征数据完全满足标准正态分布集中在激活函数中心的线性区域使激活函数丧失了非线性特性。
- 因此在BN操作中为每个卷积核引入了两个可训练参数恢复对上一层采集到的特征的表征,防止梯度消失。
池化
池化用于减少特征数据量。
最大值池化可提取图片纹理,均值池化可保留背景特征。
- TF描述池化
tf.keras.layers.MaxPool2D(
pool_size=池化核尺寸,#正方形写核长整数,或(核高h,核宽w)
strides=池化步长,#步长整数,或(纵向步长h,横向步长w),默认为pool_size
padding=‘valid’or’same’
)
model=tf.kerass.models.sequential([
Conv2D(filters=6,kernel_size=(5,5),padding='same'),
BatchNormalization(),#BN层
Activation('relu'),#激活层
MaxPool2D(pool_size(2,2),strides=2,padding='same'),#池化层
Dropout(0,2),#dropout层
])
舍弃
为了缓解神经网络过拟合在神经网络训练时,将隐藏层的一部分神经元按照一定概率从神经网络中暂时舍弃。神经网络使用时,被舍弃的神经元恢复链接。
-
TF描述池化
tf.keras.layers.Dropout(舍弃的概率)
卷积神经网络:借助卷积核提取特征后,送入全连接网络。
-
卷积神经网络的主要模块
对输入特征进行特征提取
- 卷积Convolutional
- 批标准化BN
- 激活Activation
- 池化Pooling
- 全连接FC
- 舍弃Dropout
-
卷积是什么?卷积就是特征提取器,就是CBAPD
经典卷积网络
-
LeNet(1998):卷积网络开篇之作。
-
AlexNet(2012):使用relu激活函数,提升训练速度;使用Dropout,缓解过拟合。
-
VGGNet(2014):小尺寸卷积核减少参数,网络结构规整,适合并行加速。
-
InceptionNet(2014):一层内使用不同尺寸卷积核,提升感知力,使用批标准化,缓解梯度消失。
t(1998):卷积网络开篇之作。
-
AlexNet(2012):使用relu激活函数,提升训练速度;使用Dropout,缓解过拟合。
-
VGGNet(2014):小尺寸卷积核减少参数,网络结构规整,适合并行加速。
-
InceptionNet(2014):一层内使用不同尺寸卷积核,提升感知力,使用批标准化,缓解梯度消失。
-
ResNet(2015):层间残差跳连,引入前方信息,缓解模型退化,使神经网络层,加深成为可能。