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