怎么让深度学习模型获得更好的效果?这个是一直有人问我的问题,或者可以这么问?
我怎么提高正确率?或者为什么我的深度神经网络效果这么差?我经常这样回复“”我给不出确切的答案,但是我能给你一些建议“”
下面我将列一些我认为会对提升学习效果有效的一些建议。我将这些想法mark到下面,这些想法不仅仅对深度学习有用,而且对机器学习同样有效。
提升学习算法性能的四个建议
1 通过数据
2 通过算法
3 通过微调算法
4 采用集成ensembles方式,
一 通过数据:
1)获取更多的数据
2)发明更多的数据
3)重新调整你的数据
4)变换你的数据
5)特征选择
获取更多的数据
模型的质量取决于你训练数据的质量。你需要最好的数据去解决你的问题,同时你也需要最多的数据。
深度学习和其他非线性技术的机器学习技术在数据越多时,效果越好。深度学习尤其是这样。
在图中可以看出,当数据量超过一定阶段,普通的机器学习算法到了精度极限了,但是深度学习不是。
发明更多的数据
深度学习算法在数据量大时效果会更好,但是当我们没办法获得大量的数据,我们可以发明更多的数据
一、如果你的数据是数字向量,依据已有的向量进行随机修改
二、 如果你的数据是图片,依据已有的图像进行随机修改 例如 尺度缩放、旋转、平移
上述方法被称为数据增广
在caffe中的数据层,如下图所示,中间那个镜像和crop_size就对应图像的两种操作,是数据数据增广的方式
相关链接:
重新调整你的数据
这是一个速赢的策略,这个策略在神经网络中是这样:
将数据调整到激活函数的边界范围内,如果是sigmoid激活函数,将数据调整到0-1之间,如果是tanh激活函数,将数据调整到-1,1之间。这个策略适用于输入数据X和输出数据Y,例如在神经网络输出层采用sigmoid激活函数进行二值预测,就可以归一化输出y到二值数据(0或者1)。如果是采用的softmax方式,即最终输出的结果代表的是该输出的概率,你同样也可以对中间层进行归一化。
三种归一化的方式:一、归一化到(0,1) ;二、归一化到(-1,1);三、数据标准化,即平均值为0,方差为1
在caffe中,对数据进行读取时,一般需要去均值操作,也就是计算数据的平均值,可以采用tools工具中的compute_image_mean.cpp,实际上这个操作就对应这个策略!
变换你的数据
除了上面的一些变换方法,还可以尝试下面的做法:
将数据可视化进行观察,对每一列数据(单个特征数据)进行观察:
1 每一列的数据是否看着像偏态高斯,可以通过Box-Cox变换调整偏态
2 每一列的数据是否看着像指数分布,可以尝试log变换
3 每一列的数据是否像被击倒或者切掉,可以尝试平方或者平方根
4 一些特征是不是可以进行离散化或者二值化,用来突出某些特征
基于你的直觉,可以尝试下面的做法:
数据是不是可以通过投影的方式类似PCA进行预处理?
能否把多个属性聚集成一个?
通过设置bool标志挖掘数据中潜在的信息
多抽查几种不同的变化数据的方式
相关链接:
- How to Define Your Machine Learning Problem
- Discover Feature Engineering, How to Engineer Features and How to Get Good at It
- How To Prepare Your Data For Machine Learning in Python with Scikit-Learn
特征选择
分为:
过滤方式:过滤特征选择方法运用统计方法将一个分值分配给每个特征.这些特征按照分数排序,然后决定是被保留还是从数据集中删除.这个方法通常是单变量且独立的考虑每个特征,或者考虑其依赖变量.一些过滤方法包括Chi squared test(方卡检验),information gain(信息增益)和correlation coefficient scores(相关系数得分).
包装方式:包装方法考虑一族特征作为搜索问题,不同的组合被准备,检验并和其他组合比较. 我们使用一个预测模型评估特征的组合,然后根据模型精度给每个特征组合一个分数.
这个搜索过程可能有条不紊的例如best-fist搜索算法, 它可能随机例如random hill-climbing 算法.或者它可能是启发式的例如前向和后向传递增添和删除特征的.一个例子就是递归特征消除算法.
嵌入方式:嵌入式算法在模型创建的时候,学习哪些特征对于模型精度的贡献最大.最典型的嵌入式特征选择方法是正则化方法.正则化方法也被称为引入附加约束到预测算法(例如回归算法)的优化,它偏向于较低复杂度的模型.正则规划算法的例子是Lasso,Elastic Net和Ridge Regression.
二 通过算法:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:怎样提高深度学习的效果? - Python技术站