张量:多维数组。一维、二维、三维等。
变量:形状不可变的张量。2*2形状就一直是2*2
过程:
导入工具包
数据读取
数据处理:目标值热编码
模型构建
模型训练
模型评估
回调函数(控制训练过程)
模型保存
全连接神经网络
全连接神经网络:输入层、输出层、隐藏层。
激活函数:向神经网络加入非线性因素,可以拟合曲线等任意函数。
Sigmoid:0-1。会梯度消失=0。y中心不为0。二分类输出层。
Tanh:0-1。会梯度消失=0。y中心为0。隐层。
Relu:x<0时,导数=0,权重不更新,神经元死亡。好处是可以缓解过拟合。隐层。
Leakyrelu:x<0时,导数=0.1。防止神经元死亡。隐层。
Softmax:0-1。多分类输出层。
参数初始化:偏置初始化(0)+权重初始化。权重初始化包括:随机~(正态);标准~(均匀);xavier初始化(正态+均匀);he初始化(正态+均匀)(正向传播时激活值的方差不变,反向传播时梯度的方差不变。区分xavier是方差均不变。)。
正态分布(高斯分布):均值0,标准差1
均匀分布:(a-b)/n
模型的层构建方法
(1)input+layers+model法:
input(shape输入的维度;输入层名字);
x=dense()(input)
x=dense()(x)
model( )
(2)sequential(layers)法:
(3)class mymodel(def init;def call):
损失函数:预测值与真实值之间的差异。分类损失+回归损失。
分类损失:交叉熵损失。多分类、二分类。
多分类损失:0.1是预测属于某类别的预测概率。0,1是目标值。y=1,p越大越好。
二分类损失:y是真实属于某类别的真实概率。y``是预测属于某类别的预测概率。
回归损失:mae(最小绝对误差L1)、mas(最小均方误差L2)、smooth L1(L1和L2的结合,内弯外直,内2外1)。
优化函数:用于优化权重和偏置。前向传播产生预测结果,计算损失函数,在损失最小时反向计算导数(反向传播算法=bp算法):根据损失函数对权重和偏置的层层偏导(链 式法则)更新权重和偏置(梯度下降法)。
优化思路:令权重和偏置的更新更加平滑。
优化方法:
修梯度:动量法:梯度使用指数加权平均(当前平滑=历史平滑+当前真实)。
修学习率α:Adagrad:梯度使用累加平方和。
Rmsprop;。梯度使用累加平方和的指数加权平均。
修梯&修α:adam:动量法+Rmsprop。adam思想和梯度下降差不多,但是优化效率更高,如图中的绿色箭头,考虑到红色触底后的惯性方向,绿色箭头能更快达到最优解。
复习:
1、梯度下降法:损失函数对权重求偏导,损失函数下降的最快的方向。学习率应当先快后慢。
BGD(批量):所有样本的梯度求和
SGD(随机):一个样本的梯度
MBGD(小批量):小部分样本的梯度求和。best
更新后权重=初始权重-学习率*损失函数对权重求偏导
1 -0.1*1 =0.9
Epoch:所有样本送入网络训练的次数=迭代数
Batchsize:每组送入网络训练的样本数量=每组数量。每组数量*组数=n
Iter:训练batch的次数=batch组数*迭代数
鞍点=局部最小值
2、链式传导:将复合导数拆分成一层层的初级导数
学习率退火:学习率衰减的方式。包括:分段常数衰减t;指数衰减e^t;逆时间衰减1/t。
t表示不同迭代次数=时间。
正则化:减少泛化误差;缓解网络过拟合。
泛化误差:新样本上的误差
正则化方法:范数惩罚;提前终止;dropout
·标准化:要先求均值和方差。目的:令均值为0。
·重构:gamma放大倍数,beta平移。这两个参数都是通过学习得到。重构是对标准化的结果做进一步处理,令均值不为0,这样有利于训练非线性神经网络。
卷神经网络CNN
卷神经网络:卷积层CONV、池化层POOL、全连接层FC。CONV特征提取(边缘、方向),POOL降维,FC输出结果。
滤波器=filter=卷积核=过滤器
卷积:滤波器和输入数据的局部区域做点积,最终得到的特征图会缩小。
Padding:零填充。使卷积过程中特征图的大小不变。Padding=1加上一圈0,Padding=2加上一两圈0。
stride步长:卷积核的移动步长
多通道卷积:输入多通道图像(如jgb),每一层单独卷积,三层的值相加并放到对应位置
多卷积核卷积:卷积核数=特征图通道数。
输出的特征图尺寸:
Pooling池化层:降维=对特征图进行下采样。3*3最大池化层。
最大池化层:取扫描窗口的最大值最为输出。
平均池化层:取扫描窗口的平均值最为输出。起平滑作用。=GAP。
全连接层:将特征图转换成一维向量,随后进行分类或回归。
卷积 |
池化 |
1*1 宽高不变,只改变特征的通道数(升维/降维)。卷积核的升降维度取决于1*1卷积核的通道数(几个)。 →假设输入图的尺寸为 32 * 32 * 3, 使用6个 1 * 1的卷积核卷积,得到的输出图大小为32 * 32 * 6。升维。 使用2个 1 * 1的卷积核卷积,得到的输出图大小为32 * 32 * 2,降维。 |
K=2。下采样:特征图shape/2,同时通道数不变(*2?) |
5*5 = 两个3*3卷积 |
|
7*7 = 三个3*3卷积 |
|
s=2也和pooling一样起到下采样的作用,特征图shape/2,同时通道数*2 |
图像分类:从给定的类别集合(狗、猫、熊猫...)中为图片分配对应的标签。输出:dog:95%, cat:4%, panda:1%
常用数据集:minist数据集(手写数字0-9)。CIFAR-10(10个类别)。CIFAR-100(10个类别)。ImageNet(22000个类别)
Conv2D:(filters卷积核个数,kernel size卷积核大小,strides=4,padding=’valid’,activation=None)
MaxPool2D:(pool size=(2,2)扫描窗口大小, strides=None,padding=’valid’)
keras.layers.Dense:(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform',
输出:Num*H*W*C。
Alexnet:
Input |
CONV |
POOL MAX |
CONV |
POOL MAX |
CONV |
CONV |
CONV |
POOL MAX |
Flatten |
Dense+Dropou(0.5) |
Dense+Dropou(0.5)) |
Output |
227 *227 *3 |
f=96 k=11 s=4 a=relu |
p=3 s=2 |
f=256 k=5 p=same a= |
p=3 s=2 |
f=384 k=3 p= a= |
f=384 k=3 p= a= |
f=256 k=3 p= a= |
p=3 s=2 |
u=4096 a=relu |
u=4096 a=relu |
u=10 a=softmax |
VGG16:用统一的3*3小卷积层
Input |
CONV n=2 |
POOL MAX |
CONV n=2 |
POOL MAX |
CONV n=3 |
POOL MAX |
CONV n=3 |
POOL MAX |
CONV n=3 |
POOL MAX |
Flatten |
Dense+Dropou(0.5) |
Dense+Dropou(0.5)) |
Output |
224 *224 *3 |
f=64 k=3 |
p=2 |
f=128 k=3 |
p=2 |
f=256 k=3 |
p=2 |
f=512 k=3 |
p=2 |
f=512 k=3 |
p=2 |
u=4096 a=relu |
u=4096 a=relu |
u=10 a=softmax |
GooLeNet:
Inception:6个卷积核+1个池化层。64, (96,128) , (16,32) , 32。
B1 |
B2 |
B3 |
||||||
Input |
CONV |
POOL MAX |
CONV |
CONV |
POOL MAX |
Inception |
Inception |
POOL MAX |
224 *224 *3 |
f=64 k=7 s=2 a=relu |
p=3 s=2 p=sa |
f=64 k=1 s=2 a=relu |
f=192 k=3 s=2 a=relu |
p=3 s=2 p=sa |
64, (96,128), (16,32) 32 |
128, (128,192) (32.96) 64 |
p=3 s=2 p=s |
B4 |
B5 |
||||||||||
Inception |
Aux classifier辅助输出 |
Inception |
Inception |
Inception |
Aux classifier |
Inception |
POOL MAX |
Inception |
Inception |
POOL Avg |
Output |
→c1、c2、c3、c4 192, (96,208), (16,48) 64 P1-1:CONV (c1,k=1) P2-1:CONV (c2[0],k=1) p2-1:CONV (c2 [1,k=3) P3-1:CONV (c3[0]),k=1) p3-1:CONV (c3[1],k=5) P4-1:CONV (c4,k=1) |
→filter size 128,核个数 1024神经元个数 Avg POOL (p=5,s=3) CONV (filter size[0],k=1) Flatten Dense(u=filter size[1]) Dense(u=10) |
160, (112,224), (24,64) 64 |
128, (128,256), (24,64) 64 |
112, (144,288), (32,64) 64 |
128, 1024 |
256, (160,320), (32,128) 128 |
p=3 s=2 p=sa |
256, (160,320), (32,128) 128 |
384, (192,384), (48,128) 128 |
u=10 a=softmax |
InceptionV2:将5*5的卷积用3*3的卷积替代。
InceptionV3:将3*3的卷积用3*1和1*3的卷积替代。
ResNet:残差网络,即残差模块的串联。由于真H(x)-预F(x)=残差x,训练F(x)+x来逼近真实值。ResNet18、34、50、152。
Resnet block残差模块:相同通道的残差块的串联
residual残差块:2个卷积层+BN+RELU。若输入的层数较多,则需要引入1*1卷积层调整维度,以便让浅层的特征融合到深层中。
ResNet34:
输入 |
残差 |
输出 |
|||||
Input |
CONV |
BatchNormalization |
Activation |
POOL MAX |
Resnet block 1-4 |
POOL Avg |
Dense |
224 *224 *3 |
f=64 k=7 s=2 a=relu |
relu |
p=3 s=2 p=sa |
见下方 |
u=10 a=softmax |
Resnet block1 |
Resnet block2 |
Resnet block3 |
Resnet block4 |
||||||||||||
Resi =2conv |
Resi |
Resi |
Resi =3conv |
Resi |
Resi |
Resi |
Resi =3conv |
Resi |
Resi |
Resi |
Resi |
Resi |
Resi =3conv |
Resi |
Resi |
f=64 k=3 s=1 p=s |
f=64 k=3 s=1 p=s |
f=64 k=3 s=1 p=s |
f=128 k=3 s=2 p=s + f=128 k=1 s=2 |
f=128 k=3 s=1 p=s |
f=128 k=3 s=1 p=s |
f=128 k=3 s=1 p=s |
f=256 k=3 s=2 p=s + f=256 k=1 s=2 |
f=256 k=3 s=1 p=s |
f=256 k=3 s=1 p=s |
f=256 k=3 s=1 p=s |
f=256 k=3 s=1 p=s |
f=256 k=3 s=1 p=s |
f=512 k=3 s=2 p=s + f=512 k=1 s=2 |
f=512 k=3 s=1 p=s |
f=512 k=3 s=1 p=s |
每个residual中有两个conv卷积层。以上参数是两个conv的。
如层数过多需要调整通道数时,residual中可能另外会在后面加1*1的卷积。
除了first block,其他block的第一个residual另外还要添加1*1卷积,步长为2。