张量:多维数组。一维、二维、三维等。
变量:形状不可变的张量。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
- 范数惩罚:L1&L2正则化。损失函数中加入L1&L2范数,使得权重衰减或变成0,从而让某一项减小或消失,简化模型。超参数lambda
L2正则化:
L1正则化:
- dropout正则化:在迭代过程中,随机失活每一层中的部分神经元。
- 提前停止:将一部分训练集作为验证集,当验证集的loss不再下降了,停止训练。
- BN层:网络训练时是一个批次一个批次地输入到网络中。对某一批次的神经元输出(设为m个x)进行标准化+重构,得到最终的输出结果给到下一层(y)。
·标准化:要先求均值和方差。目的:令均值为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。
全连接层:将特征图转换成一维向量,随后进行分类或回归。
图像分类:从给定的类别集合(狗、猫、熊猫...)中为图片分配对应的标签。输出: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。