深度学习之超参数调优
前几章中我已经学习了一些超参数比如学习率…
本文就开始学习超参数调优的一些知识点。
一、评估指标
首先了解一下模型的评估指标
1、混淆矩阵
该博主详细的介绍了混淆矩阵的知识点,大家可以参考一下[机器学习笔记] 混淆矩阵(Confusion Matrix)_混淆矩阵计算公式-CSDN博客
2、精确率(p)和召回率®
如果FP更重要,那么精确度是更好的指标,但是如果FN更重要那么召回率是更重要的指标。
3、F1
精确率和召回率这两者之间可能是一个此消彼长的状态,这个时候你就需要F1这个指标来评价模型
F
1
−
s
c
o
r
e
=
2
p
r
/
(
p
+
r
)
F1-score=2pr/(p+r)
F1−score=2pr/(p+r)
4、绘制学习曲线
二、数据准备
1、数据划分
代码前面几章有不详细讲述
2、数据预处理方法
1)图像灰度化:当颜色对于问题而言不重要时,可以将图像灰度化以减少计算复杂度
2)调整图像大小:输入的图像形状必须相同
3)数据归一化:便于在GD算法下快速达到最小误差
4)图像增强:
三、超参数调优
神经网络超参数分为三类:
1、网络架构
隐藏层数量,每层神经元数量,激活函数类型。这三者前面已经讲过了,简而言之就是判断过拟合或者欠拟合,欠拟合增加网络复杂度,过拟合减少网络复杂度
2、学习和优化:
1)学习率:
如果val_loss在每一步之后都下降,继续训练直到停止
如果val_loss在训练停止后还在下降,有两种举措:其一是学习率不变增加训练轮次,其二是增大一点学习率重新训练
如果val_loss开始上升或者震荡,降低学习率
2)衰减策略与自适应学习
在学习率中执行一个衰减速率,可以让网络在训练过程中自动降低学习率。
线性降低学习率(线性衰减):例如每隔无轮将学习率降低一半
指数衰减:按指数降低
Adam和Adagrad就是自适应优化器
3)小批大小(需要在优化器中使用的超参数)
如果数据集小于2000推荐使用BGD,可以使用mini-batch size,初始值可以设为64或者128.按需按倍数加
4)优化算法
深度学习计算机视觉一书中只讲了两个代表性的梯度下降优化器
Momentum(动量梯度下降):比SGD更好,使得学习在迟滞方向的震荡减慢,在水平方向上进展加快更快到达目标最小值
W
新
=
W
旧
−
学习率
∗
梯度
+
速度
W_新=W_旧-学习率*梯度+速度
W新=W旧−学习率∗梯度+速度
Adam(自适应矩估计):书中举了一个十分形象的例子是它像一个带有摩擦力的重球。它训练神经网络的速度很快,使用它的默认参数就好,lr除外。
keras.optimizers.Adam(lr=0.001,beta_1=0.9,beta_2=0.999,epsilon=0.00000001,decay=0.0)
5)训练轮数和早停标准
早停 是指在发生过拟合之前停止调试
EarlyStopping(monitor='val_loss',min_delta=0,patience=20)
3、正则化技术,避免过拟
1)L2正则化
抑制误差函数,减少隐藏单元的权重值,从而简化模型,避免过拟合
2)dropout层:前几张讲过
3)数据增强:扩充训练数据,使用例如翻转,缩放,变焦等技术生成相同图像的新实例。但效果并不总是有效
ImageDataGenerator(horizontal_flip=True,vertical_flip=True).fit(training_set)
4)批归一化
区别于数据准备阶段 的数据归一化,批归一化发生在隐藏层。
model.add(Conv2D(base_hidden_units, (3,3), padding='same', kernel_regularizer=regularizers.l2(weight_decay), input_shape=x_train.shape[1:]))#使用 Conv2D 层,具有 32 个过滤器,过滤器大小为 3x3,填充方式为 'same',并添加了 L2 正则化。
model.add(Activation('relu'))
model.add(BatchNormalization())#批归一化稳定模型
用于减少***协变量偏移问题***
关于什么是***协变量偏移问题***请参考这个链接Covariate Shift(协变量偏移)-CSDN博客
本文参考《深度学习计算机视觉》第四章,每天都在学习,要加油哦!!!