# 训练网络的定义
train_net: "lenet_train.prototxt"
# 测试网络的定义
test_net: "lenet_test.prototxt"
# test_iter指定多少前传测试应该执行。在手写体MNIST的情况下,我们测试批量100和100测试迭代,覆盖全10000测试图像(val)。
test_iter: 100
# 每迭代10000次就测试一次验证集val的识别率.
test_interval: 10000
# 基础学习率.
base_lr: 0.01
#SGD中防止进入鞍点的参数
momentum: 0.9
weight_decay: 0.0005
# 学习率策略及其所需参数
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# 每迭代10000次显示一次(若test_interval设置为20000,则在迭代10000次时仅会显示学习率和损失<若网络有设置>,而不会显示验证集的识别率,因为还没有测试)
display: 10000
# 最大的迭代次数
max_iter: 100000
#没迭代多少次保存一次中建模型
snapshot: 20000
#模型前缀
snapshot_prefix: "lenet"
# 使用 CPU 还是 GPU
solver_mode: GPU
其他相关:
1.epoch*训练数据量=batch_size*迭代次数
2.dropout层,BN层的作用?
关于dropout能够较好减轻CNN过拟合,dropout的直接作用是减少中间特征的数量,从而减少冗余,即增加每层各个特征之间的正交性(数据表征的稀疏性观点也恰好支持此解释)。一个折中的办法就是dropout,由于随机性,使每一次迭代训练时,整体来看都在更新不同的一些参数(因此这也可以看做是进行了数据扩增),使得各个特征(权值)不用每一次迭代时都一起更新、互相产生关联和影响,这样也就弱化了各个特征之间由于数据量太小导致产生的过多的相互作用,缓解了过拟合。
BN层(批量正则化/归一化)数据归一化是非常重要的预处理步骤,用于重新缩放输入的数值以适应特定的范围,从而确保在反向传播期间更好地收敛。一般来说采取的方法都是减去每个数据点的平均值并除以其标准偏差。如果我们不这样做,那么一些特征(那些具有高幅值的特征)将在cost函数中得到更大的加权(如果较高幅值的特征改变1 %,则该改变相当大,但是对于较小的特征,该改变相当小)。数据归一化使所有特征的权重相等。
3.如何防止训练过程中出现过拟合?
01.Early stopping:Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。(可以设置连续10次或者20次不增加作为条件)
02.数据集扩增:即需要得到更多的符合要求的数据,即和已有的数据是独立同分布的,或者近似独立同分布的。有以下方法:
- 从数据源头采集更多数据
- 复制原有数据并加上随机噪声
- 重采样
- 根据当前数据集估计数据分布参数,使用该分布产生更多数据等
03.正则化方法:正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则等。
04.Dropout方法。