21个深度学习调参的实用技巧
极市导读
在学习人工智能的时候,不管是机器学习还是深度学习都需要经历一个调参的过程,参数的好坏直接影响着模型效果的好坏。本文总结了在深度学习中21个实用的调参的技巧,快来学习吧! >>加入极市CV技术交流群,走在计算机视觉的最前沿
这篇文章在国外知名的网站 medium 上面获得了一千多的赞,给出了很多建议,同时也备注了论文的来源,所以这么优质的文章,大家一定要多多宣传哈
整理自:https://towardsdatascience.com/a-bunch-of-tips-and-tricks-for-training-deep-neural-networks-3ca24c31ddc8
1
2
如果问题域中的数据集类似于ImageNet数据集,则对该数据集使用预训练模型。使用最广泛的预训练模型有VGG net、ResNet、DenseNet或Xception等。有许多层架构,例如,VGG(19和16层),ResNet(152, 101, 50层或更少),DenseNet(201, 169和121层)。注意:不要尝试通过使用更多的层网来搜索超参数(例如VGG-19, ResNet-152或densen -201层网络,因为它在计算量很大),而是使用较少的层网(例如VGG-16, ResNet-50或densen -121层)。选择一个预先训练过的模型,你认为它可以用你的超参数提供最好的性能(比如ResNet-50层)。在你获得最佳超参数后,只需选择相同但更多的层网(如ResNet-101或ResNet-152层),以提高准确性。
ImageNet:http://www.image-net.org/challenges/LSVRC/2012/
VGG net :https://arxiv.org/abs/1409.1556
ResNet:https://arxiv.org/abs/1512.03385
DenseNet:https://arxiv.org/abs/1608.06993
Xception :https://arxiv.org/abs/1610.02357
微调几层,或者如果你有一个小的数据集,只训练分类器,你也可以尝试在你要微调的卷积层之后插入Dropout层,因为它可以帮助对抗网络中的过拟合。
Dropout:http://jmlr.org/papers/v15/srivastava14a.html
如果你的数据集与ImageNet数据集不相似,你可以考虑从头构建并训练你的网络。
3
BatchNormalization:https://arxiv.org/abs/1502.03167
InstanceNormalization:https://arxiv.org/abs/1607.08022
GroupNormalization:https://arxiv.org/abs/1803.08494
4
SpatialDropout:https://arxiv.org/abs/1411.4280
5
L1:https://keras.io/regularizers/
L2:https://keras.io/regularizers/
Dropout:http://jmlr.org/papers/v15/srivastava14a.html
6
from keras.constraints import max_norm
model.add(Dense(64, kernel_constraint=max_norm(2.)))
model.add(Conv2D(64, kernel_constraint=max_norm(2.)))
7
8
9
Dilated Residual Networks:https://arxiv.org/abs/1705.09914
10
semantic segmentation:https://arxiv.org/abs/1802.02611
foreground segmentation:https://arxiv.org/abs/1808.01477
11
12
sklearn:http://scikit-learn.org/stable/modules/generated/sklearn.utils.class_weight.compute_class_weight.html
OverSampling and UnderSampling techniques:https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis
13
14
Learning Rate Schedulers:https://keras.io/callbacks/#learningratescheduler
15
ReduceLROnPlateau:https://keras.io/callbacks/#reducelronplateau
EarlyStopping:https://keras.io/callbacks/#earlystopping
16
skip connections:https://arxiv.org/abs/1505.04597
17
18
Google Colab:https://colab.research.google.com/notebooks/welcome.ipynb#recent=true
使用教程:https://towardsdatascience.com/a-comprehensive-guide-on-how-to-fine-tune-deep-neural-networks-using-keras-on-google-colab-free-daaaa0aced8f
Floydhub:https://www.floydhub.com
Paperspace:https://www.paperspace.com
19
在ReLU之前使用最大池化来节省一些计算。由于ReLU阈值的值为0:f(x)=max(0,x)和最大池化只有max激活:f(x)=max(x1,x2,…,xi),使用Conv > MaxPool > ReLU 而不是Conv > ReLU > MaxPool。
因此MaxPool > ReLU = max(0, max(0.5,-0.5)) = 0.5 和ReLU > MaxPool = max(max(0,0.5), max(0,-0.5)) = 0.5 看到了吗?这两个操作的输出仍然是0.5。在这种情况下,使用MaxPool > ReLU可以节省一个max 操作。
20
Depthwise Separable Convolution:https://arxiv.org/abs/1610.02357