卷积神经网络参数设置

接触机器学习的时间还比较短,对于训练的结果往往无法解释,不知道为什么好,也不知道为什么不好。所以罗列了一下卷积神经网络中设置的参数,希望能有所帮助。

一、训练集选择

训练集(Training Set):训练模型,简单的说就是通过训练集的数据来确定拟合曲线的参数。

测试集(Test Set): 测试已经训练好的模型的精确度。

测试集和训练集的划分方法有留出法、交叉验证法和自助法,具体可以参考如何划分训练集和测试集的介绍。留出法用得比较多,自助法一般只用于样本数特别少的情况。但是,建议样本量应该要有足够多,否则机器学习的结果不太好。

简单说一下注意点:

1. 样本要随机化,防止大数据淹没小数据(到底是样本间差异很大的样本集训练出的结果好,还是样本间差异小的样本集训练出的结果好,比较疑惑图像的视角不同和颜色不同对结果的影响。);

2. 训练集数据的数量应占2/3到4/5,剩下的是测试集;

3. 样本要做归一化,归一化的具体作用是归纳统一样本的统计分布性,能减少训练时间,避免出现异常样本数据引起的训练结果无法收敛。

二、卷积参数设置

如网络层数、卷积核大小、滑动步长等属于超参数,大多是通过已有的架构来做一些微调。

一般的图像识别,卷积的网络层数设置为2层以上就足够了;如果是医学图像或者是视频类图像可能要设置3层或以上。

卷积核大小和滑动步长的设置决定了最后输出多少个特征。在达到相同感受野的情况下,卷积核越小,所需要的参数和计算量越小。用多个小的卷积核叠加使用要远比一个大的卷积核单独使用效果要好的多。当然,如果卷积核过小的话,可能会无法表示其特征。具体可以参考:https://blog.csdn.net/kuangtun9713/article/details/79475457

优化算法。每个深度学习库中,都包含了大量的优化算法,用于优化学习速率,让网络用最快的训练次数达到最优,还能防止过拟合。 常见算法可以参考一下:https://blog.csdn.net/manong_wxd/article/details/78735439

激活函数(activation function)的意义在于判定每个层的输出是否达到阈值,达到了就要提取它的特征,而没有达到就会输出为0,这样就使得和该特征无关的区域不会影响到该特征提取方式的训练。注意,激活函数一定是非线性的,因为卷积的每一层的输出都是上一层的线性函数,无论神经网络有多少层,输出都是输入的线性组合。如果激活函数仍然使用线性的,多层的隐藏函数与一层的隐藏函数作用相当,就失去了深度神经网络的意义。常用的激活函数有Sigmoid、ReLu,tanh等等,函数的选择视样本输入选择(多层神经网络一般使用relu)。具体可以参考https://blog.csdn.net/fire_light_/article/details/79542602

Dropout layer的放置位置以及大小非常重要,一般既可以放在激活函数前也可以放在激活函数后面,具体效果要靠自己调。训练一个大型网络时,因为训练数据有限,很容易出现过拟合,即模型的泛化能力差,网络只对训练数据集的拟合能力好,换成其他的数据集,拟合能力就变差了。所以,有了Dropout layer,使网络在提取训练集特征时,舍弃掉一部分特征来提高网络的泛化能力,其作用就是防止过拟合。

三、调整的参数

1. mini-batch值

batch值是指一次性读入batch-size批量的图片。它的选择很重要,从1至几百(很大数据量的情况下)都是比较合适的,要根据数据集的大小、电脑性能等等来选择,才能达到比较好的效果。batch值太小,容易不收敛,或者需要经过很大的epoch才能收敛;太大,电脑显存受不住。详细了解可以看一下:https://blog.csdn.net/ycheng_sjtu/article/details/49804041https://blog.csdn.net/zilanpotou182/article/details/76165241

2. 学习速率(learning rate)

很重要。深度学习模型通常由随机梯度下降算法进行训练。随机梯度下降算法有许多变形:例如 Adam、RMSProp、Adagrad 等等。这些算法都需要你设置学习率。学习率决定了在一个小批量(mini-batch)中权重在梯度方向要移动多远。如果学习率很低,训练会变得更加可靠,但是优化会耗费较长的时间,因为朝向损失函数最小值的每个步长很小。反之,如果学习率很高,训练可能根本不会收敛,甚至会发散。权重的改变量可能非常大,使得优化越过最小值,使得损失函数变得更糟。所以,训练应当从相对较大的学习率开始。这是因为在开始时,初始的随机权重远离最优值。在训练过程中,学习率应当下降,以允许细粒度的权重更新。比如一开始可以lr设置为0.1,然后运行到loss不怎么降的时候,学习速率除以10,设置为0.01,再接着训练。具体可以参考:https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/78566465

来源:CSDN,作者:nanqi123
原文:https://blog.csdn.net/nanqi123/article/details/83537097
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章