第一种:网络模型相关的参数
- 神经网络网络层
- 隐藏层单元大小
- 卷积核数量
- 损失层的选择
第二种:数据预处理
- 批量大小
- 归一化
第三种:超参数
- 激活函数:Relu
- 初始化(一般不需要修改)
- 梯度下降:SGD,Adam
- 训练的轮数、次数
- 批量大小
- 学习率
- 衰减函数
- 正则化
什么情况下需要调参呢?通常是在网络训练的结果:
1.过拟合,样本数量太少了
解决办法:数据增强、早停法、dropout、学习率、训练的次数
2.欠拟合
解决办法:加深网络层数、尽量用一些非线性激活函数比如relu、迭代次数调整
3.拟合,但是在震荡
解决办法:数据增强太多了、降低学习率
4.不收敛
解决办法:数据预处理部分、使用的网络层数
过程
- 搭建网络模型
- 先用小样本,减少训练时间
- 分析损失值
模型示例
- 加载数据集
- 搭建网络模型—定义类(初始化和前向传播)
- 实例化网络模型(传递的参数与初始化参数一致)
- 定义损失函数和优化器
- 初始化记录损失值的列表
- 设置训练的步数
- 训练的函数体
模型在小数据集上表现良好,在大数据集上表现不佳?
解决办法:数据集进行数据清洗