柠檬友玩

首页 > 游戏资讯 > 正文

cnn app 设置中文,学习cnn的推荐教程

时间:2022-11-30 13:04:01

APP永久免费入口

正文约11000字,建议阅读15分钟。 本文详细比较了各种超参数对CNN模型性能的影响。

CNN优化摘要systematicevaluationofcnadvancesontheimagenet使用无batchnorm的ELU非线性或有batchnorm的ReLU。 通过1*1这样的网络结构预先训练RGB数据,可以得到更好的效果。 使用线性学习率衰退策略。 使用平均和最大池化层之和。 使用约128(0.005到256 ) 0.01 )的最小缓冲大小。 如果这对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。 关于这个有很好的论文。 dropoutasabayesianapproximation:representingmodeluncertaintyindeeplearning [ galyarinzoubinghahramani,2015]。 避开Sigmoid/TanH的门。 它们成本高昂,容易饱和,有可能停止反向传播。 事实上,你的网络越深,就越应该避免使用Sigmoid和TanH。 能够使用更便宜、更有效的ReLU和PreLU门,正如Yoshua Bengio等人的论文deepsparserectifierneuralnetworks所述,两者促进了疏水性,反向传播更为稳健。 在最大池化之前,请不要使用ReLU或PreLU,而是在保存计算后使用。 请勿使用ReLU。 太旧了。 他们是非常有用的非线性函数,可以解决很多问题。 但是,请试着用这个微调新模型。 ReLU会阻碍反向传播,无法顺利初始化,因此无法获得微调效果。 但是你应该使用PreLU和非常小的乘数,通常是0.1。 使用PreLU的话收敛快,而且不会像ReLU那样在初期阶段被卡住。 ELU也可以,但成本很高。 经常使用批标准化。 论文: batch normalization:acceleratingdeepnetworktrainingbyreducinginternalcovariateshift [ sergeyioffechristianszegedy,2015] 批处理标准化可以加快收敛速度,减小数据集。 这样可以节约时间和资源。 大多数人喜欢删除平均值,但我不喜欢。 我喜欢将输入数据压缩为[-1,1 ]。 这可以说是培训和部署方面的技巧,而不是提高性能的技巧。 可以应用更小的模型。 像我这样部署深度学习模型后,可以立即感受到将千兆字节规模的模型强加于用户和地球另一端的服务的痛苦。 即使牺牲一些精度,也应该小型化。 如果使用的是小模型,请尝试ensemble。 通常,ensemble 5的5个网络可以将精度提高约3%。 尽可能使用xavier进行初始化。 仅在较大的完全连接层中使用,可以避免在CNN层中使用。 关于这个的说明请阅读这篇文章。 如果anexplanationofxavierinitialization ( byandyjones )输入数据包含空间参数,请尝试端到端CNN。 可以阅读这篇论文: squeeze net:Alex net-levelaccuracywith 50 xfewerparametersand 0.5 mbmodelsize [ forrestn.iandolaet.al.2016 ] 那个位置有助于提高性能。 如果没有高端GPU,什么都不要训练。 当使用模型或自己的层创建模板时,请记住要参数化所有内容。 否则,必须重建所有二进制文件。 最后,请理解你在做什么。 深度学习就像机器学习中的一颗子弹,它不是任何任务、任何时候都有效的。

了解你使用的结构和想要达到的目的,才不会盲目地复制模型。

提高算法性能的想法这个列表上出现的想法虽然完全,但是是个好的开始。 我的目的是提出很多可以尝试的想法。 其中有一两个人希望你以前没想到。 仅仅是好的想法往往会提高性能。 从任何一种想法中得到结果后,请在评论区告诉我。 我很高兴能知道这些好消息。 如果你有更多的想法,或者列举的想法的传播,请告诉我和其他读者都会受益! 也许只有一个想法就能突破别人。 我把这篇博文分成四个部分:

1 .数据性能提升2 .算法性能提升3 .算法参数性能提升4 .嵌套模型性能提升通常,随着列表自上而下,性能提升也会变小。 例如,将问题变成新的框架或获取更多的数据通常比调整最佳算法参数产生更好的效果。 不是一直都是,但通常都是。 我在博客教程、相应网站的问题、经典的Neural Net FAQ中添加了相应的链接。 部分思路只适用于人工神经网络,但大部分是通用的。 通用性足以冲突如何与其他技术合作提高模型性能。 好的,现在开始吧。 1 .提高数据性能通过适当修改训练数据和问题的定义,可以获得巨大的性能提高。 可能是最大的性能提高。 我要讲的想法如下。

选择获取更多的数据创建更多的数据,缩小数据,转换数据特征,重建问题

1 )获取更多数据。 能取得更多的训练数据吗? 你的模型质量通常受训练数据质量的限制。 为了得到最好的模型,首先应该考虑得到最好数据的方法。 你也想尽可能多地得到那些最好的数据。 有更多的数据。 深度学习和其他现代非线性机器学习技术有更完整的学习来源,可以更好地学习。 深度学习尤其如此。 这也是机器学习对大家有吸引力的一大理由。 更多的数据并不总是有用的,但确实有用。 对我来说,如果可能的话,我会选择获取更多的数据。 请参阅以下相关文章。 datasetsoveralgorithms ( www.edge.org/response-detail/26587 )2)创建更多数据在上一节中已经提到过有更多数据,但我们会有深度学习虽然可能无法合理获取更多数据,但请尝试创建更多数据。

如果你的数据是数值型向量,你可以随机构造现有向量的修改版本。 如果你的数据是图片,你可以随机构建现有图片的修改版本(平移、剪切、旋转等)。 如果你的数据是文本,类似的操作……这通常称为数据扩展( data augmentation )或数据生成( data generation )。 可以使用生成模型。 也可以使用简单的技巧。 例如,对于图像数据,可以通过随机平移或旋转现有图像来提高性能。 如果新数据包含此转换,将提高模型的泛化能力。 这也与噪声的增加有关,我们习惯于称之为扰动的增加。 起到与归一化方法相同的作用,抑制训练数据的过度拟合。 以下是相关的阅读。

imageaugmentationfordeeplearningwithkeras http://machinelearningmastery.com/image-augmentation-deep-learning-keras /

3 )重新缩放( rescale )这是一种快速获得性能提升的方法。 应用神经网络时,传统的经验法则之一是将数据重新标度( rescale )到激活函数的边界。 如果使用的是sigmoid激活函数,请将数据重新缩放到0和1之间的区间。 如果使用双曲正切激活函数,请将数据重新缩放到-1和1之间的区间。 此方法适用于输入数据( x )和输出数据( y )。 例如,如果要在输出层中使用sigmoid函数预测二元分类的结果,则需要将y值标准化为二元。 如果使用的是softmax函数,则可以通过标准化y值获益。 这还是一个很好的经验法则,但我想更深入。 建议使用以下方法创建几种不同的训练数据版本:

归一化为0和1的区间。 -1和1区间标准化(译者注:将数据标准化为零均值、标准差单位),然后对于每种方法,评估你的模型性能,选择最好的使用。 改变激活函数后,重复这个过程。 在神经网络中,大的数值累积效应(叠加)不是一件好事。 除上述方法外,还有其他控制神经网络中数据数值大小的方法,如归一化激活函数和权重。 这些技术将在后面讨论。 请阅读以下内容。

shouldistandardizetheinputvariables ( column vectors ) FTP://FTP.SAS.com/pub/neural/FAQ2. html # a _ stdhowtoprepareyourdataformachinelearninginpythonwithscikit-learn http://machinelearningmastery.com/prepare-data-mmm

4 )数据转换此处的数据转换与上述重定标方法相似,但需要做更多的工作。 你必须熟悉你的数据。 根据可视化考察离群点。 推测各列数据的单变量分布。

列数据看起来像时滞的高斯分布吗? 考虑用Box-Cox变换调整偏置。 列数据看起来像指数分布吗? 考虑对数变换。 列数据看起来有几个特征,但它们被明显的东西覆盖着。 尝试通过平方或取平方根来转换数据。 可以将特征离散化或以某种方式组合,以更好地强调特征吗? 依靠你的直觉,尝试以下方法。

可以用PCA这样的投影方法预处理数据吗? 能否将多维特征合并为一个数值(特征)? 用新的布尔标签能发现问题中有有趣的一面吗? 可以用其他方法探索当前场景的其他特殊结构吗? 神经网络层擅长特征学习( feature engineering )。 那个自己可以。 但是,如果能更好地发现网络中的结构问题,神经网层会学习得更快。 可以对数据进行各种转换方法的采样,也可以尝试特定的性质,看看哪些是有用的,哪些是无用的。 以下是相关的阅读。

howtodefineyourmachinelearningproblem http://machinelearningmastery.com/how-to-define-your-machine-learning-probleng howtoengineerfeaturesandhowtogetgoodatit 3358 machinelearningmastery. discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/howtoprepareyourdataformachinelearninginpythonwithscikit-learn http://machinelearningmastery.com/prepare-data-machine

5 )特征选择一般来说,神经网络对无关特征具有鲁棒性(校注:无关特征对神经网络的训练和效果影响不大)。 这些用接近0的权重减弱无预测能力的特征的贡献。 尽管如此,这些无关的数据特性在训练周期中消耗大量资源。 所以能从数据中去除一些特征吗? 有很多特征选择的方法和特征重要性的方法,这些方法为你提供了思路,应该保留哪些特征,应该去除哪些特征。 最简单的方法是比较所有特征和部分特征的效果。 同样,如果你有时间,我建议你在同一个网络中选择不同的视角来看你的问题,评估它们,看它们各自都有什么性能。

用更少的特征可能达到同等或更好的性能。 而且,这会让模型更快! 所有的特征选择方法可能都排除了同一特征的子集。 是的,这些方法在没用的特征上达成了一致。 筛选出的特征子集可能能够给出特征工程的新思路。 以下是相关的阅读。

anintroductiontofeatureselection http://machinelearningmastery.com/an-introduction-to-feature-selection/fatureselectionformachinelearninginpython http://machinelearningmastery.com/feature-selection-machine-learning-pyt hoot

6 )重建你的问题时,你可能会试着跳出你现在定义的问题。 想想你收集的观察值是否是定义你的问题的唯一方法。 也许还有其他方法。 构造问题的其他方法也许可以更好地阐明需要学习的问题的结构。 我真的很喜欢这个尝试。 因为那会让你打开自己的想法。 这确实很难。 特别是在现有方法上投入了很多时间和金钱的情况下。 不过,让我们这样想吧。 即使你列举了3-5个备选方案,最终放弃了它们,这至少也表明你对目前的方案更有信心。

可以在一个时间窗(时间周期)内将现有的特征/数据合并为一个。 你的分类问题可能会是回归问题。 你的二元输出可能会是softmax输出吗? 相反,也许可以对子问题建模。 仔细考虑你的问题,在选定工具之前最好考虑用不同的方法构建你的问题。 因为这个时候你对解决方案投资不多。 除此之外,如果你中了某个问题,这样简单的尝试可以释放更多的新想法。 而且,这并不意味着你之前的工作白费了。 关于这一点,请看后续模型的嵌套部分。 请阅读以下内容。

howtodefineyourmachinelearningproblem http://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等,以选择性能最好的算法,然后通过进一步的参数调整和数据准备进行改进。 特别注意将深度学习与其他常规机器学习方法进行比较,对上述结果进行排名,并比较他们的优劣。 在很多情况下,您会发现在您的问题中可以使用更简单、更快、更容易理解的算法,而无需深度学习。 请阅读以下内容。

adata-drivenapproachtomachinelearning http://machinelearningmastery.com/A-data-driven-approach-to-machine-learnine whyyoushouldbespot-checkingalgorithmsonyourmachinelearningproblems 33

2 )参考现有文献方法选择的捷径之一是参考现有文献资料。 可能已经有人研究过与你的问题相关的问题了。 看看他们用的是什么方法。 论文,书籍,博客,问答; A可以阅读网站、教程和谷歌上可以搜索的内容。 写下所有的想法,用你的方式研究他们。 这不是复制别人的研究,而是启发你想出新的想法,虽然没有想到,但是也有可能会提高性能的想法。 发表的研究通常受到很好的赞扬。 世界上有很多非常聪明的人,写了很多有趣的事情。 必须好好挖掘这个“图书馆”,找到想要的东西。 请阅读以下内容。

howtoresearchamachinelearningalgorithm http://machinelearningmastery.com/how-to-research-a-machine-learning-algor

3 )需要了解重采样方法模型的效果。 模型性能的估计可靠吗? 深度学习模式在训练阶段非常慢。 这通常意味着无法通过k层交叉验证等常用方法估算模型的性能。

可能使用了简单的训练集/测试集的分割。 这是通常的做法。 如果是这样的话,你需要确保这个分割在你的问题上有代表性。 单变量的统计和可视化是一个好的开始。 也许可以用硬件加速估计过程。 例如,如果您拥有集群或AWS云服务( Amazon Web services )帐户,则可以并行训练n个模型,以获取结果的平均值和标准差,从而获得更稳健的估计。 利用hold-out验证方法或许可以了解训练后模型的性能。 (这在“早期停止”( early stopping )中很有用,如下所述。 也许可以先隐藏完全没有使用的验证集,在选择完模型后再使用。 其他方法也许可以缩小数据集,或者使用更强大的重采样方法。

在某些情况下,您会发现在训练集中的某些示例中训练获得的模型性能与在整个数据集中训练获得的模型性能有很强的相关性。 也许可以在小数据集上完成模型选择和参数调整,然后将最终方法扩展到所有数据集。 也许可以用某种方法限制数据集,只取一部分样本,然后用它来完成所有的建模过程。 请阅读以下内容。

evaluatetheperformanceofdeeplearningmodelsinkeras 3358 machinelearningmastery.com/evaluate-performance-deep-learning evaluatetheperformanceofmachinelearningalgorithmsinpythonusingresampling http://machineleleled

通过算法提高性能通常是工作的关键。 在抽样调查中可以快速找到一个或两个性能优良的算法。 但是,获得最佳算法可能需要几天、几周、甚至几个月。 为了得到更优的模型,以下是对神经网络算法进行参数调整的一些思路。

诊断(权重初始化( Weight Initialization )学习速度( Learning Rate )激活函数网络拓扑)批次和周期( Batches and Epochs )规范化优化和丢失早期停止法)啊有关超级参数优化的信息,请参阅博文:

howtogridsearchhyperparametersfordeeplearningmodelsinpythonwithkeras http://machinelearningmastery.com/grid-search-hyperpeperarch

1 )了解诊断模型失效的原因,到提高就可以获得性能更好的模型。 你的模特是过配还是过配? 把这个问题永远放在心里。 永远。 模型总是有拟合,拟合不够,只是程度不同。 一种快速理解模型学习行为的方法是在每个周期评估模型在训练集和验证集中的性能并绘制图表。

如果训练集中的模型始终优于验证集中的模型,则可能遇到过拟合。 请使用归一化等方法。 如果训练集和验证集的模型较差,则可能遇到了拟合不足。 可以增加网络容量,进行更多的训练,或者进行更长时间的训练。 如果存在某个拐点,然后训练集的模型开始优于验证集的模型,则可能需要使用快停法。 通过仔细绘制这些图表并学习它们以了解各种方法,可以提高模型的性能。 这些图表可能是你能创造的最有价值的(模型状态)诊断信息。 另一个有用的诊断是判定网络模型是正确的和错误的观察值。

对于难以训练的样本,可能需要更多的数据。 也许应该去除在训练集中容易建模的多余样本。 也许可以将训练集分为不同的区域,在特定的区域使用更专业的模式。 请阅读以下内容。

displaydeeplearningmodeltraininghistoryinkeras http://machinelearningmastery.com/display-deep-learning-model-training overfittingandunderfittingwithmachinelearningalgorithms http://machinelearningmastery

2 )权重初始化的经验法则通常用小随机数初始化。 在实践中,这可能还有效,但对你的网络来说最好吗? 不同的激活函数也有启发式初始化方法,但在实践应用中差异不大。 固定你的网络,尝试各种初始化方式。 请记住,权重是你模型的真正参数。 我们需要找到他们。 很多组的权重会有很好的表现,但必须尽可能地找到最好的。

尝试所有不同的初始化方法,考察在其他情况不变的情况下(效果)是否有更好的方法。 请尝试用自动编码( autoencoder )等无监视的方法进行事前学习。 请尝试使用已经存在的模型。 只是针对你的问题重新训练输入层和输出层。 (转移学习) )。 需要注意的是,权重初始化方法与激活函数以及优化函数/丢失函数密切相关。 请阅读以下内容。

initializationofdeepnetworks 3358 deep dish.io/2015/02/24/network-initial ization /

3 )学习率调整学习率往往也是有效的时间段。 以下是一些可以探索的想法。

通过实验大学习率和小学习率的网格点检索文献中常见的学习速度值来考察你能学到多深的网络。 每周期减少的学习率经过一定周期数,尝试按比例减少的学习率。 增加运动量项“momentum term”,尝试同时网格搜索学习速度和运动量。 越是大规模的网络越需要大量的训练,反之亦然。 过多增加神经元和层数会适当提高学习速度。 同时学习率需要结合训练周期、batch size的大小和优化方法来考虑。 请阅读以下内容。

usinglearningrateschedulesfordeeplearningmodelsinpythonwithkeras 3358 machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/whatlearningrateshouldbeusedforbackpropftp :

4 )也许应该使用激活函数修改激活函数( rectifier activation functions )。 他们也许能提供更好的性能。 在此之前,第一个激活函数是sigmoid和tanh,然后是softmax、线性激活函数或输出层上的sigmoid函数。 我不建议你尝试更多的激活函数,除非你自己知道你在做什么。 尝试所有三种激活函数,并重新缩放数据以满足激活函数的边界。 很明显,我想为输出的形式选择正确的传递函数,但是请考虑探索不同的表示。 例如,将二元分类问题中使用的sigmoid函数切换为回归问题中使用的线性函数,对你的输出进行后处理。 这可能需要更改损失函数,使之更合适。 详情请参照数据转换一节。 请阅读以下内容。

whyuseactivationfunctionsftp://FTP.SAS.com/pub/neural/FAQ2. html # a _ act

5 )网络拓扑结构的变化带来好处。 需要几层和几个神经元? 对不起没有人知道。 不要问这样的问题…怎样找到符合你的问题的配置? 去实验吧。

试试隐藏的层和很多神经元(广度模型)。 尝试深度网络,但每层几乎没有神经元(深度模型)。 试试上述两种方法的组合。 参考研究问题和你相似的论文中的结构。 总是很难尝试选择拓扑模式(扇出(并扇入) )和书籍论文中的经验法则(下方有链接) )。 通常,越是大型网络就越有代表性,所以可能需要。 层数越多,就越能有力地提供从数据中学到的抽象特征。 我可能需要那个。 深层的神经网络需要更多的训练,训练周期和学习率都应该相应调整。 以下是相关阅读。 这些链接会启发你很多应该尝试什么样的事情。 至少对我来说是这样。

howmanyhiddenlayersshouldiuseftp://FTP.SAS.com/pub/neural/FAQ3. html # a _ hlhowmanyhiddenunitshouldiuseftp :

6 ) Batches和周期batch size的大小决定了更新最后一个梯度和权重的频率。 一个周期( epoch )是神经网络查看所有训练数据的过程。 是否尝试了不同批次的batch size和周期数? 到目前为止,我们讨论了学习率、网络大小和周期的关系。 在深层网络结构中很常见。 小的batch size有很大的训练周期。 以下事情可能对你的问题有帮助,也可能不是。 你必须用自己的数据尝试并观察。

尝试选择与训练数据相同大小的batch size。 但是,请注意内存(批处理学习) ( batch learning )。 batch size (在线学习) )尝试选择1。 尝试在网格中搜索不同的小batch size。 ( 8、16、32、…。 考虑接近无限的周期值(持续的训练),记录迄今为止得到的最佳模型。 一些网络结构对batch size很敏感。 我们知道多层感知器( Multilayer Perceptrons )通常对batch size很稳健,LSTM和CNNs很敏感,但这只是说明(仅供参考)。 请阅读以下内容。

What are batch,incremental, on-line…learningftp://FTP.SAS.com/pub/neural/FAQ2. html # a _ stylesintuitiveer howdoesmini-batchsizeafffer

7 )正则化是避免模型在训练集中拟合的好方法。 神经网络中最热的正则化技术是dropout方法。 你试过吗? dropout法在训练阶段随机跳过一些神经元,驱动该层其他神经元捕捉松弛。 简单有效。 也可以从dropout方法开始。

在网格中查找不同的丢失率。 在输入、隐藏层和输出层分别尝试dropout方法的dropout方法中也有一些扩展。 例如,可以尝试drop connect方法。 也可以尝试其他更传统的神经网络规范化方法。 例如:

也可以使用惩罚(权重衰减的较大权重激活约束)的不同方面(惩罚较大激活值)和/或不同类型的惩罚/规范化) L1、L2 以下是相关阅读。

dropoutregularizationindeeplearningmodelswithkeras http://machinelearningmastery.com/dropout-regular ization-deep-learninge

8 )优化和损失最普遍的是应用随机梯度下降法,但目前有非常多的优化器。 你尝试过不同的优化过程吗? 随机梯度下降法是默认选择。 首先好好利用它,分配不同的学习率和运动量。 许多更高级的优化方法有更多的参数,更复杂,更快的收敛速度。 是好是坏,需要不需要用,取决于你的问题。 为了更好地利用给定的(优化的)方法,必须了解每个参数的含义,并针对问题在网格中搜索不同的值。 困难,消耗时间,但值得。 我找到了更常用的更新方法,提供了更快收敛、快速掌握特定网络容量的方法。 例如,以下内容:

也可以探索其他优化算法,例如ADAMRMSprop更传统( Levenberg-Marquardt )或更不传统( genetic algorithms )。 其他方法可以为随机梯度下降法等类似方法提供较好的出发点并加以改进。 优化的损失函数与你要解决的问题高度相关。 但是,通常你有一些余地。 (回归问题的均方误差( MSE )和平均绝对误差( MAE ) )等微调。 在某些情况下,根据输出数据的规模和使用的激活函数,转换损耗函数可能会提供较小的性能改进。 以下是相关的阅读。

anoverviewofgradientdescentoptimizationalgorithms 3358 sebastian ruder.com/optimizing-gradient-descent/whatareconjugation etc.FTP://FTP.SAS.com/pub/neural/FAQ2. html # a _ numanalonoptimizationmethodsfordeetion

9 )在Early Stopping/早期停止法训练中,如果(验证集)的性能开始下降,可以停止训练和学习。 这样可以节省大量时间,也可以使用更详细的重采样方法来评估模型的性能。 早停法是一种避免模型在训练数据中过度匹配的正则化方式,需要监测模型在训练集中和验证集中各轮的效果。 验证集中的模型性能开始下降时,可以停止训练。 如果满足某些条件(测量精度损失),还可以通过设置“检查点”( Checkpointing )来保存模型,以便模型能够继续学习。 通过检查点,可以快速停止,而不是实际停止训练,因此最后可以选择几个模型。 以下是相关的阅读。

how to check-pointdeeplearningmodelsinkeras http://machinelearningmastery.com/check-point-deep-learning-models-kera

通过在嵌套模型中提高性能,可以组合多个模型的预测能力。 我刚才提到了提高最后一个性能这个算法的参数,调整参数后,这是下一个可以提高的大领域。 实际上,通过组合多个“足够好”的模型,而不是组合多个高度调整的(脆弱的)模型,可以获得更好的预测能力。 可以考虑以下三种方法。

组合模型的视角堆栈( Stacking ) ) ) ) )。

1 )组合模型时,有时不选择模型,而是直接组合。 如果有多个不同的深度学习模型,并且在研究问题中各自都很好,则可以通过取这些预测的平均值进行组合。 模型差异越大,最终效果越好。 例如,可以应用非常不同的网络拓扑和不同的技术。 如果每个模型都运行良好,但方法/方式不同,则嵌套预测能力更稳健。 每次你训练网络,你都会初始化不同的权重,然后它会收敛到不同的最终权重。 可以多次重复这个过程以获得很多网络,然后将这些网络的预测值进行组合。 那些预测高度相关,但难以预测的特征会带来意想不到的小提高。 以下是相关的阅读。

ensemblemachinelearningalgorithmsinpythonwithscikit-learn http://machinelearningmastery.com/ensemble-machine-learning howtoimprovemachinelearningresults 3358 machinelearningmmoning

2 )组合的视角与上述相似,但从不同的视角重构你的问题,训练模型。 类似地,虽然目标是有效的,但是得到不同的模型(例如,不相关的预测)。 得到不同模型的方法可以依靠我们在数据部分罗列的非常不同的缩放和变换方法。 用于训练模型的转换方法越不同,构造问题的方法越不同,结果越好。 使用简单的预测平均值是一个好的开始。

3 )堆叠/堆叠您还可以学习如何预测如何最佳地组合多个模型。 这称为堆栈泛化( stacked generalization ),或简言之称为堆栈。 通常,使用简单的线性回归方法可以获得比取预测平均更好的结果。 像正则化回归一样,学习如何对不同的预测模型进行加权。 基线模型可以通过取子模型的预测平均得到,但是应用学习了权重的模型可以提高性能。

stackedgeneralization(stacking ) http://machine-learning.Martin sewell.com/ensembles/stacking /

其余可供参考的资源在其他地方有很多好资源,但几乎不能把所有的想法联系起来。 如果想深入研究,列举了以下资源和相应的博客。 你可以找到很多有趣的东西。

neuralnetworkfaqftp://FTP.SAS.com/pub/neural/FAQ.htmlhowtogridsearchyperparametersfordeeplearningmodelsinpythonwithkeras http://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/mustknowtips/tricksindeepneuralnetworks http://lakaketwors CNN tricks.htmlhowtoincreasevalidationaccuracywithdeepneuralnet http://stack overflow.com/questions/37020754 /