当前位置: 首页 > news >正文

国外网站推广方法wordpress 正版插件吗

国外网站推广方法,wordpress 正版插件吗,拓者室内设计论坛官方网,网站加速cdn自己做关注置顶“算法猿的成长”每日8:30#xff0c;干货速递#xff01;转载自 Charlotte数据挖掘资料来自网上#xff0c;略有删改针对CNN优化的总结Systematic evaluation of CNN advances on the ImageNet使用没有 batchnorm 的 ELU 非线性或者有 batchnorm 的 ReLU。用类… 关注置顶“算法猿的成长”每日8:30干货速递转载自 Charlotte数据挖掘资料来自网上略有删改针对CNN优化的总结Systematic evaluation of CNN advances on the ImageNet使用没有 batchnorm 的 ELU 非线性或者有 batchnorm 的 ReLU。用类似1*1的网络结构预训练RGB数据能得到更好的效果。使用线性学习率衰退策略。使用平均和最大池化层的和。使用大约 1280.005 到 256 0.01的 mini-batch 大小。如果这对你的 GPU 而言太大将学习率按比例降到这个大小就行。使用卷积层代替之前的MLP中的线性层并用平均池化层预测。当研究增加训练集大小的时候需要确定数据集对性能提升的平衡点。数据的质量要比数据大小更重要。如果你不能增加输入图像的大小在随后的层上减少步幅stride这样做有同样的效果。如果你的网络有复杂和高度优化的架构像是 GoogLeNet那修改一定要谨慎。其他可以详细看看论文作者很辛苦的对比了各种超参数对CNN模型性能的影响非常值得一看。下面转自https://nmarkou.blogspot.com.cy/2017/02/the-black-magic-of-deep-learning-tips.html有助于充分利用 DNN 的小技巧记得要 shuffle。不要让你的网络通过完全相同的 minibatch如果框架允许在每个 epoch 都 shuffle 一次。扩展数据集。DNN 需要大量的数据而且模型在小的数据集上很容易过拟合。我强烈建议你要扩展原始的数据集。如果你的是一个视觉任务可以增加噪点、增白减少像素旋转或色移模糊等等可以扩展的一切。有一点不好的是假如你扩展得太大可能训练的数据大多数是相同的。我创建了一个应用随机变换的层来解决这个问题这样就不会有相同的样本。若果你用的是语音数据可以进行移位和失真处理。在整个数据集上训练之前先在非常小的子数据集上训练进行过拟合这样你会知道你的网络可以收敛。这个 tip 来自 Karpathy。始终使用 dropout 将过拟合的几率最小化。在大小  256 完全连接层或卷积层之后就应该使用 dropout。关于这一点有一篇很好的论文Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning [Gal Yarin Zoubin Ghahramani2015].避免 LRN 池化MAX 池化会更快。避免 Sigmoid/TanH 的门它们代价昂贵容易饱和而且可能会停止反向传播。实际上你的网络越深就越应该避免使用 Sigmoid 和 TanH。可以使用更便宜而且更有效的 ReLU 和 PreLU 的门正如在 Yoshua Bengio 等人的论文 Deep Sparse Rectifier Neural Networks 中所提到的这两者能够促进稀疏性而且它们的反向传播更加鲁棒。在最大池化之前不要使用 ReLU 或 PreLU 而是在保存计算之后使用它。 不要使用 ReLU 它们太旧了。虽然他们是非常有用的非线性函数可以解决很多问题。但是你可以试试用它微调一个新模型由于 ReLU 阻碍反向传播初始化不好你没法得到任何微调效果。但是你应该用 PreLU 以及一个非常小的乘数通常是0.1。使用 PreLU 的话收敛更快而且不会像 ReLU 那样在初始阶段被卡住。ELU 也很好但成本高。经常使用批标准化。参考论文Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift [Sergey Ioffe Christian Szegedy,2015]。这会很有效。批标准化允许更快的收敛非常快以及更小的数据集。这样你能够节省时间和资源。虽然大多数人喜欢删除平均值不过我不喜欢。我喜欢压缩输入数据为[-11]。这可以说是训练和部署方面的技巧而不是针对提升性能的技巧。要能适用更小的模型。假如你是像我这样部署深度学习模型你很快就会体会到把千兆字节规模的模型推给用户或地球另一端的服务器的痛苦。哪怕要牺牲一些准确度也应该小型化。假如你使用比较小的模型可以试试 ensemble。通常 ensemble 5个网络能够提升准确度约3%。尽可能使用 xavier 初始化。你可以只在大的完全连接层上使用它然后避免在 CNN 层上使用。有关这点的解释可以阅读这篇文章An Explanation of Xavier Initializationby Andy Jones如果你的输入数据有空间参数可以试试端到端的 CNN。可以阅读这篇论文SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and 0.5MB model size [Forrest N. Iandola et. al. 2016]它介绍了一种新的方法而且性能非常好你可以尝试应用上面提到的tips。修改你的模型只要可能就使用 1x1 的 CNN 层它的位置对提高性能很有帮助。假如没有高端的 GPU就不要尝试训练任何东西了。假如你要利用模型或你自己的层来制作模板记得把所有东西参数化否则你得重建所有二进制文件。最后要明白你在做什么。深度学习就像是机器学习里的中子弹它不是任何任务、任何时候都有效的。了解你正在使用的结构以及你试图达成的目的才不至于盲目地复制模型。提升算法性能思路这个列表里提到的思路并完全但是一个好的开始。我的目的是给出很多可以尝试的思路希望其中的一或两个你之前没有想到。你经常只需要一个好的想法就能得到性能提升。如果你能从其中一个思路中得到结果请在评论区告诉我。我很高兴能得知这些好消息。如果你有更多的想法或者是所列思路的拓展也请告诉我我和其他读者都将受益有时候仅仅是一个想法或许就能使他人得到突破。我将此博文分为四个部分 1. 通过数据提升性能 2. 通过算法提升性能 3. 通过算法调参提升性能 4. 通过嵌套模型提升性能通常来讲随着列表自上而下性能的提升也将变小。例如对问题进行新的架构或者获取更多的数据通常比调整最优算法的参数能带来更好的效果。虽然并不总是这样但是通常来讲是的。我已经把相应的链接加入了博客的教程中相应网站的问题中以及经典的Neural Net FAQ中。部分思路只适用于人工神经网络但是大部分是通用的。通用到足够你用来配合其他技术来碰撞出提升模型性能的方法。OK现在让我们开始吧。1. 通过数据提升性能对你的训练数据和问题定义进行适当改变你能得到很大的性能提升。或许是最大的性能提升。以下是我将要提到的思路获取更多数据创造更多数据重放缩你的数据转换你的数据特征选取重架构你的问题1) 获取更多数据你能获取更多训练数据吗 你的模型的质量通常受到你的训练数据质量的限制。为了得到最好的模型你首先应该想办法获得最好的数据。你也想尽可能多的获得那些最好的数据。有更多的数据深度学习和其他现代的非线性机器学习技术有更全的学习源能学得更好深度学习尤为如此。这也是机器学习对大家充满吸引力的很大一个原因世界到处都是数据。更多的数据并不是总是有用但是确实有帮助。于我而言如果可以我会选择获取更多的数据。可以参见以下相关阅读 · Datasets Over Algorithmswww.edge.org/response-detail/265872) 创造更多数据上一小节说到了有了更多数据深度学习算法通常会变的更好。有些时候你可能无法合理地获取更多数据那你可以试试创造更多数据。如果你的数据是数值型向量可以随机构造已有向量的修改版本。如果你的数据是图片可以随机构造已有图片的修改版本(平移、截取、旋转等)。如果你的数据是文本类似的操作……这通常被称作数据扩增data augmentation或者数据生成data generation。你可以利用一个生成模型。你也可以用一些简单的技巧。例如针对图片数据你可以通过随机地平移或旋转已有图片获取性能的提升。如果新数据中包含了这种转换则提升了模型的泛化能力。这也与增加噪声是相关的我们习惯称之为增加扰动。它起到了与正则化方法类似的作用即抑制训练数据的过拟合。以下是相关阅读Image Augmentation for Deep Learning With Kerashttp://machinelearningmastery.com/image-augmentation-deep-learning-keras/What is jitter? (Training with noise)ftp://ftp.sas.com/pub/neural/FAQ3.html#A_jitter3) 重缩放(rescale)你的数据这是一个快速获得性能提升的方法。 当应用神经网络时一个传统的经验法则是重缩放(rescale)你的数据至激活函数的边界。如果你在使用sigmoid激活函数重缩放你的数据到0和1的区间里。如果你在使用双曲正切tanh激活函数重缩放数据到1和1的区间里。这种方法可以被应用到输入数据x和输出数据y。例如如果你在输出层使用sigmoid函数去预测二元分类的结果应当标准化y值使之成为二元的。如果你在使用softmax函数你依旧可以通过标准化y值来获益。这依旧是一个好的经验法则但是我想更深入一点。我建议你可以参考下述方法来创造一些训练数据的不同的版本归一化到0和1的区间。重放缩到1和1的区间标准化译者注标准化数据使之成为零均值单位标准差然后对每一种方法评估你的模型的性能选取最好的进行使用。如果你改变了你的激活函数重复这一过程。在神经网络中大的数值累积效应(叠加叠乘)并不是好事除上述方法之外还有其他的方法来控制你的神经网络中数据的数值大小譬如归一化激活函数和权重我们会在以后讨论这些技术。以下为相关阅读Should I standardize the input variables (column vectors)?ftp://ftp.sas.com/pub/neural/FAQ2.html#A_stdHow To Prepare Your Data For Machine Learning in Python with Scikit-Learnhttp://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/4) 数据变换这里的数据变换与上述的重缩放方法类似但需要更多工作。 你必须非常熟悉你的数据。通过可视化来考察离群点。猜测每一列数据的单变量分布。列数据看起来像偏斜的高斯分布吗考虑用Box-Cox变换调整偏态。列数据看起来像指数分布吗考虑用对数变换。列数据看起来有一些特征但是它们被一些明显的东西遮盖了尝试取平方或者开平方根来转换数据你能离散化一个特征或者以某种方式组合特征来更好地突出一些特征吗依靠你的直觉尝试以下方法。你能利用类似PCA的投影方法来预处理数据吗你能综合多维特征至一个单一数值(特征)吗你能用一个新的布尔标签去发现问题中存在一些有趣的方面吗你能用其他方法探索出目前场景下的其他特殊结构吗神经网层擅长特征学习(feature engineering)。它(自己)可以做到这件事。但是如果你能更好的发现问题到网络中的结构神经网层会学习地更快。你可以对你的数据就不同的转换方式进行抽样调查或者尝试特定的性质来看哪些有用哪些没用。以下是相关阅读How to Define Your Machine Learning Problemhttp://machinelearningmastery.com/how-to-define-your-machine-learning-problem/Discover Feature Engineering, How to Engineer Features and How to Get Good at Ithttp://machinelearningmastery.com/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-Learnhttp://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/5) 特征选择一般说来神经网络对不相关的特征是具有鲁棒的(校对注即不相关的特征不会很大影响神经网络的训练和效果)。它们会用近似于0的权重来弱化那些没有预测能力的特征的贡献。尽管如此这些无关的数据特征在训练周期依旧要耗费大量的资源。所以你能去除数据里的一些特征吗有许多特征选择的方法和特征重要性的方法这些方法能够给你提供思路哪些特征该保留哪些特征该剔除。最简单的方式就是对比所有特征和部分特征的效果。同样的如果你有时间我建议在同一个网络中尝试选择不同的视角来看待你的问题评估它们来看看分别有怎样的性能。或许你利用更少的特征就能达到同等甚至更好的性能。而且这将使模型变得更快或许所有的特征选择方法都剔除了同样的特征子集。很好这些方法在没用的特征上达成了一致。或许筛选过后的特征子集能带给特征工程的新思路。以下是相关阅读An Introduction to Feature Selectionhttp://machinelearningmastery.com/an-introduction-to-feature-selection/Feature Selection For Machine Learning in Pythonhttp://machinelearningmastery.com/feature-selection-machine-learning-python/6) 重新架构你的问题有时候要试试从你当前定义的问题中跳出来想想你所收集到的观察值是定义你问题的唯一方式吗或许存在其他方法。或许其他构建问题的方式能够更好地揭示待学习问题的结构。我真的很喜欢这个尝试因为它迫使你打开自己的思路。这确实很难尤其是当你已经对当前的方法投入了大量的时间和金钱时。但是咱们这么想想即使你列出了3-5个可供替代的建构方案而且最终还是放弃了它们但这至少说明你对当前的方案更加自信了。看看能够在一个时间窗时间周期内对已有的特征/数据做一个合并。或许你的分类问题可以成为一个回归问题(有时候是回归到分类)。或许你的二元输出可以变成softmax输出或许你可以转而对子问题进行建模。仔细思考你的问题最好在你选定工具之前就考虑用不同方法构建你的问题因为此时你对解决方案并没有花费太多的投入。除此之外如果你在某个问题上卡住了这样一个简单的尝试能释放更多新的想法。而且这并不代表你之前的工作白干了关于这点你可以看看后续的模型嵌套部分。以下为相关阅读How to Define Your Machine Learning Problemhttp://machinelearningmastery.com/how-to-define-your-machine-learning-problem/通过算法提升性能机器学习当然是用算法解决问题。所有的理论和数学都是描绘了应用不同的方法从数据中学习一个决策过程如果我们这里只讨论预测模型。你已经选择了深度学习来解释你的问题。但是这真的是最好的选择吗在这一节中我们会在深入到如何最大地发掘你所选择的深度学习方法之前接触一些算法选择上的思路。下面是一个简要列表对算法进行抽样调查借鉴已有文献重采样方法下面我解释下上面提到的几个方法。1) 对算法进行抽样调查其实你事先无法知道针对你的问题哪个算法是最优的。如果你知道你可能就不需要机器学习了。那有没有什么数据(办法)可以证明你选择的方法是正确的让我们来解决这个难题。当从所有可能的问题中平均来看各算法的性能时没有哪个算法能够永远胜过其他算法。所有的算法都是平等的下面是在no free lunch theorem中的一个总结。或许你选择的算法不是针对你的问题最优的那个我们不是在尝试解决所有问题算法世界中有很多新热的方法可是它们可能并不是针对你数据集的最优算法。我的建议是收集(证据)数据指标。接受更好的算法或许存在这一观点并且给予其他算法在解决你的问题上“公平竞争”的机会。抽样调查一系列可行的方法来看看哪些还不错哪些不理想。首先尝试评估一些线性方法例如逻辑回归logistic regression和线性判别分析linear discriminate analysis。评估一些树类模型例如CART 随机森林Random Forest和Gradient Boosting。评估一些实例方法例如支持向量机SVM和K-近邻kNN。评估一些其他的神经网络方法例如LVQ, MLP, CNN, LSTM, hybrids等选取性能最好的算法然后通过进一步的调参和数据准备来提升。尤其注意对比一下深度学习和其他常规机器学习方法对上述结果进行排名比较他们的优劣。很多时候你会发现在你的问题上可以不用深度学习而是使用一些更简单训练速度更快甚至是更容易理解的算法。以下为相关阅读A Data-Driven Approach to Machine Learninghttp://machinelearningmastery.com/a-data-driven-approach-to-machine-learning/Why you should be Spot-Checking Algorithms on your Machine Learning Problemshttp://machinelearningmastery.com/why-you-should-be-spot-checking-algorithms-on-your-machine-learning-problems/Spot-Check Classification Machine Learning Algorithms in Python with scikit-learnhttp://machinelearningmastery.com/spot-check-classification-machine-learning-algorithms-python-scikit-learn/2) 借鉴已有文献方法选择的一个捷径是借鉴已有的文献资料。可能有人已经研究过与你的问题相关的问题你可以看看他们用的什么方法。你可以阅读论文书籍博客问答网站教程以及任何能在谷歌搜索到的东西。写下所有的想法然后用你的方式把他们研究一遍。这不是复制别人的研究而是启发你想出新的想法一些你从没想到但是却有可能带来性能提升的想法。发表的研究通常都是非常赞的。世界上有非常多聪明的人写了很多有趣的东西。你应当好好挖掘这个“图书馆”找到你想要的东西。以下为相关阅读How to Research a Machine Learning Algorithmhttp://machinelearningmastery.com/how-to-research-a-machine-learning-algorithm/Google Scholarhttp://scholar.google.com/3) 重采样方法你必须知道你的模型效果如何。你对模型性能的估计可靠吗深度学习模型在训练阶段非常缓慢。这通常意味着我们无法用一些常用的方法例如k层交叉验证去估计模型的性能。或许你在使用一个简单的训练集测试集分割这是常规套路。如果是这样你需要确保这种分割针对你的问题具有代表性。单变量统计和可视化是一个好的开始。或许你能利用硬件来加速估计的过程。例如如果你有集群或者AWS云端服务Amazon Web Services账号你可以并行地训练n个模型然后获取结果的均值和标准差来得到更鲁棒的估计。或许你可以利用hold-out验证方法来了解模型在训练后的性能这在早停法early stopping中很有用后面会讲到。或许你可以先隐藏一个完全没用过的验证集等到你已经完成模型选择之后再使用它。而有时候另外的方式或许你能够让数据集变得更小以及使用更强的重采样方法。有些情况下你会发现在训练集的一部分样本上训练得到的模型的性能和在整个数据集上训练得到的模型的性能有很强的相关性。也许你可以先在小数据集上完成模型选择和参数调优然后再将最终的方法扩展到全部数据集上。或许你可以用某些方式限制数据集只取一部分样本然后用它进行全部的建模过程。以下为相关阅读Evaluate the Performance Of Deep Learning Models in Kerashttp://machinelearningmastery.com/evaluate-performance-deep-learning-models-keras/Evaluate the Performance of Machine Learning Algorithms in Python using Resamplinghttp://machinelearningmastery.com/evaluate-performance-machine-learning-algorithms-python-using-resampling/通过算法调参提升性能这通常是工作的关键所在。你经常可以通过抽样调查快速地发现一个或两个性能优秀的算法。但是如果想得到最优的算法可能需要几天几周甚至几个月。为了获得更优的模型以下是对神经网络算法进行参数调优的几点思路诊断Diagnostics权重初始化Weight Initialization学习速率Learning Rate激活函数网络拓扑Network Topology批次和周期Batches and Epochs正则化优化和损失早停法你可能需要训练一个给定“参数配置”的神经网络模型很多次3-10次甚至更多才能得到一个估计性能不错的参数配置。这一点几乎适用于这一节中你能够调参的所有方面。关于超参数优化请参阅博文How to Grid Search Hyperparameters for Deep Learning Models in Python With Kerashttp://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/1) 诊断如果你能知道为什么你的模型性能不再提高了你就能获得拥有更好性能的模型。你的模型是过拟合还是欠拟合永远牢记这个问题。永远。模型总是会遇到过拟合或者欠拟合只是程度不同罢了。一个快速了解模型学习行为的方法是在每个周期评估模型在训练集和验证集上的表现并作出图表。如果训练集上的模型总是优于验证集上的模型你可能遇到了过拟合你可以使用诸如正则化的方法。如果训练集和验证集上的模型都很差你可能遇到了欠拟合你可以提升网络的容量以及训练更多或者更久。如果有一个拐点存在在那之后训练集上的模型开始优于验证集上的模型你可能需要使用早停法。经常画一画这些图表学习它们来了解不同的方法你能够提升模型的性能。这些图表可能是你能创造的最有价值的模型状态诊断信息。另一个有用的诊断是网络模型判定对和判定错的观察值。对于难以训练的样本或许你需要更多的数据。或许你应该剔除训练集中易于建模的多余的样本。也许可以尝试对训练集划分不同的区域在特定区域中用更专长的模型。以下为相关阅读Display Deep Learning Model Training History in Kerashttp://machinelearningmastery.com/display-deep-learning-model-training-history-in-keras/Overfitting and Underfitting With Machine Learning Algorithmshttp://machinelearningmastery.com/overfitting-and-underfitting-with-machine-learning-algorithms/2) 权重初始化经验法则通常是用小的随机数进行初始化。在实践中这可能依旧效果不错但是对于你的网络来说是最佳的吗对于不同的激活函数也有一些启发式的初始化方法但是在实践应用中并没有太多不同。固定你的网络然后尝试多种初始化方式。记住权重是你的模型真正的参数你需要找到他们。有很多组权重都能有不错的性能表现但我们要尽量找到最好的。尝试所有不同的初始化方法考察是否有一种方法在其他情况不变的情况下(效果)更优。尝试用无监督的方法例如自动编码autoencoder来进行预先学习。尝试使用一个已经存在的模型只是针对你的问题重新训练输入层和输出层迁移学习transfer learning需要提醒的一点是改变权重初始化方法和激活函数甚至优化函数/损失函数紧密相关。以下为相关阅读Initialization of deep networkshttp://deepdish.io/2015/02/24/network-initialization/3) 学习率调整学习率很多时候也是行之有效的时段。以下是可供探索的一些想法实验很大和很小的学习率格点搜索文献里常见的学习速率值考察你能学习多深的网络。尝试随周期递减的学习率尝试经过固定周期数后按比例减小的学习率。尝试增加一个动量项momentum term然后对学习速率和动量同时进行格点搜索。越大的网络需要越多的训练反之亦然。如果你添加了太多的神经元和层数适当提升你的学习速率。同时学习率需要和训练周期batch size大小以及优化方法联系在一起考虑。以下为相关阅读Using Learning Rate Schedules for Deep Learning Models in Python with Kerashttp://machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/What learning rate should be used for backprop?ftp://ftp.sas.com/pub/neural/FAQ2.html#A_learn_rate4) 激活函数你或许应该使用修正激活函数rectifier activation functions。他们也许能提供更好的性能。在这之前最早的激活函数是sigmoid和tanh之后是softmax, 线性激活函数或者输出层上的sigmoid函数。我不建议尝试更多的激活函数除非你知道你自己在干什么。尝试全部三种激活函数并且重缩放你的数据以满足激活函数的边界。显然你想要为输出的形式选择正确的传递函数但是可以考虑一下探索不同表示。例如把在二元分类问题上使用的sigmoid函数切换到回归问题上使用的线性函数然后后置处理你的输出。这可能需要改变损失函数使之更合适。详情参阅数据转换那一节。以下为相关阅读Why use activation functions?ftp://ftp.sas.com/pub/neural/FAQ2.html#A_act5) 网络拓扑网络结构的改变能带来好处。你需要多少层以及多少个神经元抱歉没有人知道。不要问这种问题…那怎么找到适用你的问题的配置呢去实验吧。尝试一个隐藏层和许多神经元广度模型。尝试一个深的网络但是每层只有很少的神经元深度模型。尝试上述两种方法的组合。借鉴研究问题与你的类似的论文里面的结构。尝试拓扑模式扇出fan out然后扇入fan in和书籍论文里的经验法则下有链接选择总是很困难的。通常说来越大的网络有越强的代表能力或许你需要它。越多的层数可以提供更强的从数据中学到的抽象特征的能力。或许需要它。深层的神经网络需要更多的训练无论是训练周期还是学习率都应该相应地进行调整。以下为相关阅读 这些链接会给你很多启发该尝试哪些事情至少对我来说是的。How many hidden layers should I use?ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hlHow many hidden units should I use?ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hu6) Batches和周期batch size大小会决定最后的梯度以及更新权重的频度。一个周期(epoch)指的是神经网络看一遍全部训练数据的过程。你是否已经试验了不同的批次batch size和周期数之前我们已经讨论了学习率网络大小和周期之间的关系。在很深的网络结构里你会经常看到小的batch size配以大的训练周期。下面这些或许能有助于你的问题也或许不能。你要在自己的数据上尝试和观察。尝试选取与训练数据同大小的batch size但注意一下内存批次学习batch learning尝试选取1作为batch size在线学习online learning尝试用格点搜索不同的小的batch size81632…分别尝试训练少量周期和大量周期。考虑一个接近无穷的周期值(持续训练)去记录到目前为止能得到的最佳的模型。一些网络结构对batch size更敏感。我知道多层感知器Multilayer Perceptrons通常对batch size是鲁棒的而LSTM和CNNs比较敏感但是这只是一个说法仅供参考。以下为相关阅读What are batch, incremental, on-line … learning?ftp://ftp.sas.com/pub/neural/FAQ2.html#A_stylesIntuitively, how does mini-batch size affect the performance of (stochastic) gradient descent?https://www.quora.com/Intuitively-how-does-mini-batch-size-affect-the-performance-of-stochastic-gradient-descent7) 正则化正则化是一个避免模型在训练集上过拟合的好方法。神经网络里最新最热的正则化技术是dropout方法你是否试过dropout方法在训练阶段随机地跳过一些神经元驱动这一层其他的神经元去捕捉松弛。简单而有效。你可以从dropout方法开始。格点搜索不同的丢失比例。分别在输入隐藏层和输出层中试验dropout方法dropout方法也有一些拓展比如你也可以尝试drop connect方法。也可以尝试其他更传统的神经网络正则化方法例如权重衰减Weight decay去惩罚大的权重激活约束Activation constraint去惩罚大的激活值你也可以试验惩罚不同的方面或者使用不同种类的惩罚/正则化L1, L2, 或者二者同时以下是相关阅读Dropout Regularization in Deep Learning Models With Kerashttp://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/What is Weight Decay?ftp://ftp.sas.com/pub/neural/FAQ3.html#A_decay8) 优化和损失最常见是应用随机梯度下降法stochastic gradient descent但是现在有非常多的优化器。你试验过不同的优化(方法)过程吗随机梯度下降法是默认的选择。先好好利用它配以不同的学习率和动量。许多更高级的优化方法有更多的参数更复杂也有更快的收敛速度。好与坏是不是需要用取决于你的问题。为了更好的利用好一个给定的(优化)方法你真的需要弄明白每个参数的意义然后针对你的问题通过格点搜索不同的的取值。困难消耗时间但是值得。我发现了一些更新更流行的方法它们可以收敛的更快并且针对一个给定网络的容量提供了一个快速了解的方式例如ADAMRMSprop你还可以探索其他优化算法例如更传统的Levenberg-Marquardt和不那么传统的genetic algorithms。其他方法能够为随机梯度下降法和其他类似方法提供好的出发点去改进。要被优化的损失函数与你要解决的问题高度相关。然而你通常还是有一些余地可以做一些微调例如回归问题中的均方误MSE和平均绝对误差MAE等有时候变换损失函数还有可能获得小的性能提升这取决于你输出数据的规模和使用的激活函数。以下是相关阅读An overview of gradient descent optimization algorithmshttp://sebastianruder.com/optimizing-gradient-descent/What are conjugate gradients, Levenberg-Marquardt, etc.?ftp://ftp.sas.com/pub/neural/FAQ2.html#A_numanalOn Optimization Methods for Deep Learning, 2011 PDFhttp://ai.stanford.edu/~ang/papers/icml11-OptimizationForDeepLearning.pdf9) Early Stopping/早停法一旦训练过程中出现(验证集)性能开始下降你可以停止训练与学习。这可以节省很多时间而且甚至可以让你使用更详尽的重采样方法来评估你的模型的性能。早停法是一种用来避免模型在训练数据上的过拟合的正则化方式它需要你监测模型在训练集以及验证集上每一轮的效果。一旦验证集上的模型性能开始下降训练就可以停止。如果某个条件满足衡量准确率的损失你还可以设置检查点(Checkpointing)来储存模型使得模型能够继续学习。检查点使你能够早停而非真正的停止训练因此在最后你将有一些模型可供选择。以下是相关阅读How to Check-Point Deep Learning Models in Kerashttp://machinelearningmastery.com/check-point-deep-learning-models-keras/What is early stopping?ftp://ftp.sas.com/pub/neural/FAQ3.html#A_stop通过嵌套模型提升性能你可以组合多个模型的预测能力。刚才提到了算法调参可以提高最后的性能调参之后这是下一个可以提升的大领域。事实上你可以经常通过组合多个“足够好的”模型来得到优秀的预测能力而不是通过组合多个高度调参的脆弱的模型。你可以考虑以下三个方面的嵌套方式组合模型组合视角堆叠Stacking1) 组合模型有时候我们干脆不做模型选择而是直接组合它们。如果你有多个不同的深度学习模型在你的研究问题上每一个都表现的还不错你可以通过取它们预测的平均值来进行组合。模型差异越大最终效果越好。例如你可以应用非常不同的网络拓扑或者不同的技术。如果每个模型都效果不错但是不同的方法/方式嵌套后的预测能力将更加鲁棒。每一次你训练网络你初始化不同的权重然后它会收敛到不同的最终权重。你可以多次重复这一过程去得到很多网络然后把这些网络的预测值组合在一起。它们的预测将会高度相关但是在那些难以预测的特征上它会给你一个意外的小提升。以下是相关阅读Ensemble Machine Learning Algorithms in Python with scikit-learnhttp://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn/How to Improve Machine Learning Resultshttp://machinelearningmastery.com/how-to-improve-machine-learning-results/2) 组合视角同上述类似但是从不同视角重构你的问题训练你的模型。同样目标得到的是效果不错但是不同的模型例如不相关的预测。得到不同的模型的方法你可以依赖我们在数据那一小节中罗列的那些非常不同的放缩和转换方法。你用来训练模型的转换方法越不同你构建问题的方式越不同你的结果被提升的程度就越高。简单使用预测的均值将会是一个好的开始。3) stacking/堆叠你还可以学习如何最佳地组合多个模型的预测。这称作堆叠泛化stacked generalization或者简短来说就叫堆叠。通常上你使用简单线性回归方法就可以得到比取预测平均更好的结果像正则化的回归regularized regression就会学习如何给不同的预测模型赋权重。基线模型是通过取子模型的预测均值得到的但是应用学习了权重的模型会提升性能。Stacked Generalization (Stacking)http://machine-learning.martinsewell.com/ensembles/stacking/其余的可参考资源别的地方有很多很好的资源但是几乎没有能将所有想法串联在一起的。如果你想深入研究我列出了如下资源和相应的博客你能发现很多有趣的东西。Neural Network FAQftp://ftp.sas.com/pub/neural/FAQ.htmlHow to Grid Search Hyperparameters for Deep Learning Models in Python With Kerashttp://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/Must Know Tips/Tricks in Deep Neural Networkshttp://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.htmlHow to increase validation accuracy with deep neural net?http://stackoverflow.com/questions/37020754/how-to-increase-validation-accuracy-with-deep-neural-net推荐阅读点击标题可跳转阅读深度学习的一些经验总结和建议| To do v.s Not To Do北漂经历 | 我在北京这几年我为什么要写博客李宏毅1 天搞懂深度学习我总结了 300 页 PPT附思维导图-点击右下角 告诉大家你“在看”-
http://www.yutouwan.com/news/353921/

相关文章:

  • 电子商务网站建设财务预算网站建设猫腻
  • 网站建设优化推广安徽电子商务网站html模板
  • 重庆触摸屏 电子商务网站建设哈尔版网站建设
  • 云盘网站如何做呢喃wordpress 模板
  • ps怎么做网站模板建设银行官方网站个人
  • 白酒 网站模板淘宝客的网站是如何建设的
  • 网站开发技术及特点网站风格代码
  • 商城网站有什么好处微信开发者平台怎么登
  • 百度建立自己的网站滨海天津网站建设
  • 网站建设这个职业是什么意思什么网站做任务能挣
  • seo推广优化外包价格长沙网站优化方法
  • 广州市酒店网站设计河北邯郸永利ktv视频
  • 辽宁省企业信息系统厦门搜索引擎优化
  • o2o网站源码app在手机上编写安卓app
  • 做预算兼职的网站烟台城乡建设学校96级给排水网站
  • 手机免费自建网站企业营销型网站建设公司
  • 呼和浩特市城乡建设网站毛站
  • 网站开发设计报告wordpress移动自媒体
  • 瑞安联科网站建设ps软件哪个版本最好用
  • 什么行业最需要做网站建设wordpress最新淘宝客程序
  • 衡阳市做淘宝网站建设网络免费推广网站
  • 建设工程教育网官网下载手机网站优化指南
  • 个人自己免费建网站如何在网站做宣传
  • 珠海网站建设厚瑜个人网站做cpa
  • 新手容易上手的cms做企业网站培训网页课程
  • 做外单阿里的网站html网页制作背景图片
  • 泉州手机网站建设设计制作散发寄递销售给予处分
  • 银川专业做网站郴州做网站 郴网互联
  • 无极限网站模板wordpress安装微信登录插件
  • dooor网站娄底哪里学习网站建设和seo