【深度学习】深度学习实践经验汇总

实践经验:

  • 深度学习模型查找 bug
    的过程非常艰难。因此要从简单的地方着手,循序渐进,例如模型的优化(如正则化)始终可以在代码调试完成后进行。
  • 我们还需要经常可视化预测结果和模型度量标准,并且我们首先需要令模型先跑起来,这样就有一个可以后退的基线。我们最好不要陷在一个很大的模型,并尝试将所有的模块都弄好。
  • 项目研究阶段:先对现有产品进行研究,以探索它们的弱点。 站在巨人的肩膀上。阅读研究论文可能会很痛苦,但非常有意义
  • 对数据的质量要重视起来:类别均衡,数据充足,数据和标记中有高质量信息,数据和标记错误非常小,与你的问题相关。
  • 与学术数据集相比,小型项目收集的样本很少,在适当情况下可以应用迁移学习(先利用来自相关领域的大量数据来辅助模型训练与学校,然后在所处项目场景数据集上对预测后的模型和网络进行微调)。
  • 避免随机改进:首先分析自己模型的弱点,而不是随意地改进。
  • 建立深度学习并不是简单的把网络层堆在一起。增加好的限制(constraints)能使得学习更为有效,或者更智能。例如,应用注意机制,能让网络知道注意哪里,在变分自编码器中,我们训练隐藏因子使其服从正态分布。
  • 许多预训练模型可用于解决深度学习难题。(这一点深有体会,在NLP上如此,在看到的图像处理、机器翻译领域亦是如此。)
  • L1 正则化和 L2 正则化都很常见,但 L2 正则化在深度学习中更受欢迎。L1 正则化可以产生更加稀疏的参数,然而,L2
    正则化仍然更受欢迎,因为解可能更稳定。
  • 梯度下降:始终密切监视梯度是否消失或爆炸,梯度下降问题有许多可能的原因,这些原因难以证实。不要跳至学习速率调整或使模型设计改变太快。
  • 缩放输入特征。我们通常将特征缩放为以零为均值在特定范围内,如 [-1, 1]。特征的不适当缩放是梯度爆炸或降低的一个最常见的原因。
  • 有时我们从训练数据中计算均值和方差,以使数据更接近正态分布。如果缩放验证或测试数据,要再次利用训练数据的均值和方差。(其实还可以通过分布,来check训练样本和真实样本分布diff)
  • 批量归一化也有助于解决梯度下降问题,因此它逐渐取代了 Dropout。结合 Dropout 和 L2
    正则化的好处是领域特定的。通常,我们可以在调优过程中测试 dropout,并收集经验数据来证明其益处。
  • 激活函数:在 DL 中,ReLU是最常用的非线性激活函数。如果学习速率太高,则许多节点的激活值可能会处于零值。如果改变学习速率没有帮助,我们可以尝试 leaky ReLU或 PReLU。在 leaky ReLU 中,当 x < 0 时,它不输出 0,而是具有小的预定义向下斜率(如 0.01
    或由超参数设置)。参数 ReLU(PReLU)往前推动一步。每个节点将具有可训练斜率。
  • 确保样本在每个数据集和每批训练样本中被充分打乱。
  • 用小量的训练数据使模型过拟合是 debug 深度学习的最好方式。如果在数千次迭代内,损失值不下降,进一步 debgug代码。准确率超越瞎猜的概念,你就获得了第一个里程碑。然后对模型做后续的修改:增加网络层和自定义;开始用完整训练数据做训练;通过监控训练和验证数据集之间的准确率差别,来增加正则化控制过拟合。
  • 前期的问题主要来自于 bug,而不是模型设计和精调问题。(赞) 把权重全部初始化到 0是最常见的错误,深度网络也学不到任何东西。权重要按照高斯分布做初始化。
  • 检查和测试损失函数的准确性。模型的损失值一定要比随机猜测的值低。例如,在 10 类别分类问题中,随机猜测的的交叉熵损失是-ln(1/10)。
  • 避免使用多个数据损失函数。每个损失函数的权重可能有不同的数量级,也需要一些精力去调整。如果我们只有一个损失函数,就可以只在意学习率了。
  • 数据增强:收集有标签的数据是一件昂贵的工作。对于图片来说,我们可以使用数据增强方法如旋转、随机剪裁、移位等方式来对已有数据进行修改,生成更多的数据。颜色失真则包括色调、饱和度和曝光偏移。(在NLP领域中应用到少些。)
  • Mini-batch 尺寸:通常的批尺寸是 8、16、32 或 64。如果批尺寸太小,则梯度下降不会很顺畅,模型学习的速度慢,损失可能会振荡。如果批尺寸太大,则完成一次训练迭代(一轮更新)的时间太长,得到的返回结果较小。在我们的项目中,我们降低批尺寸,因为每次训练迭代时间太长。我们密切监控整个学习速度和损失。如果损失振荡剧烈,则我们会知道批尺寸降低的幅度太大了。批尺寸影响正则化因子等超参数。一旦我们确定好批尺寸,我们通常就锁定了值。
  • 学习率和正则化因子高度相关,有时需要一起调。不要太早进行精细调整,有可能浪费时间。设计改变的话这些努力就白费了。 Dropout 率通常在 20% 到 50% 之间。我们先从 20% 开始。如果模型出现过拟合,则提高值。
  • 网格搜索的计算量很大。对于较小的项目,它们会被零星使用。我们开始用较少的迭代来调整粗粒度参数。在后期的细调阶段,我们会使用更长的迭代,并将数值调至 3(或更低)。
  • kaggle是一个很棒的学习,讨论的地方。毕竟纸上得来终觉浅,须知此事要躬行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深度学习框架PyTorch是一种基于Python的开源机器学习库,它提供了高度灵活的工具,使得开发者可以轻松地构建和训练深度学习模型。本书《深度学习框架PyTorch入门与实践》详细介绍了PyTorch的基础知识和实践技巧,包括张量操作、自动求导、神经网络、卷积神经网络、循环神经网络、生成对抗网络等内容。通过本书的学习,读者可以掌握PyTorch的基本操作和常用技巧,进而构建和训练自己的深度学习模型。 ### 回答2: 作为一个新兴的深度学习框架,pytorch依托于Python语言的简洁易用以及其丰富的科学计算库,被越来越多的研究者和开发者所青睐。本文将从pytorch的基础入门、数据处理、模型训练、模型部署等方面,为大家介绍pytorch的应用。 一、pytorch基础入门 首先,我们要知道,pytorch最大的特点就是可以像numpy一样对tensor进行计算,并且在GPU加速下运算更为迅速。在使用pytorch时,我们首先要学会创建tensor和进行基本操作。tensor可以被认为是一种高维数组,可以包含数字、字符串等不同类型的数据。在pytorch中,我们可以使用torch.Tensor()或者torch.tensor()来创建一个tensor。注意,在这个过程中,tensor的类型需要和数据类型一致。 二、数据处理 在深度学习中,数据处理一直是一个非常重要的环节。pytorch提供了很多工具来帮我们处理数据。在数据处理之前,我们需要准备好原始数据以及标签,然后将它们转换为tensor。当我们需要进行数据增强时,pytorch的torchvision.transforms提供了许多方便的图像变换方法。 三、模型训练 模型训练是pytorch中最重要的一部分,它可以帮助我们实现各种神经网络模型的训练和调试。在使用pytorch进行模型训练的过程中,我们首先需要构建模型。在构建模型时,我们可以使用nn.Module来定义一个新的类。然后,在训练之前,我们需要定义损失函数和优化器。通过损失函数,我们可以衡量模型训练的效果。而通过优化器,我们可以在训练过程中,不断地调整模型参数,最终实现模型收敛和表现更好的效果。最后,我们需要将数据传入训练模型进行模型训练。 四、模型部署 完成模型训练后,我们需要将所训练的模型进行部署。在pytorch中,我们可以使用torch.jit包将模型转换为脚本模式,这样可以更加方便地对模型进行序列化和导出。当然,我们可以根据自己的具体需求,选择其他的部署方式或者框架。 总的来说,pytorch的使用非常简单,对于初学者来说,可以先从一个小型的模型入手,依次掌握整个搭建模型的过程,并不断调整和修改,直到最终实现满足自己的需求。同时,pytorch社区也非常活跃,有许多优秀的教程和示例代码,可以帮助我们更快更好地学习和应用pytorch框架。 ### 回答3: PyTorch 是一种基于 Python 的深度学习框架,拥有动态图的特性。PyTorch的主要功能被组织成了以下模块:torch.autograd、torch.nn、torch.optim等。 在深度学习领域中,PyTorch已经成为最受欢迎和广泛使用的工具之一。它的动态计算图能够为用户提供清晰的代码编写方式并且支持即时调试。同时,PyTorch还提供了广泛的预训练模型供用户使用,例如在图像、自然语言处理和语音识别等领域的常用模型。 PyTorch提供了广泛的API供用户使用,其中包括多种数据类型、矩阵、向量操作等底层接口。同时,卷积神经网络、循环神经网络与长短时记忆等网络模型也都在PyTorch中得到了支持。用户可以使用PyTorch自带的函数和层构建自己的深度学习网络,并且使用PyTorch提供的自动微分功能进行模型训练和优化。 值得一提的是,PyTorch还能与TensorFlow、Caffe等深度学习框架灵活地配合使用。此外,它还提供了强大的可视化工具,可帮助用户更好地理解深度学习模型的运作。 总之,深度学习框架PyTorch具有易用、高效、灵活等优点,拥有着广泛的应用场景,对于新手来说也很容易入门。通过PyTorch,用户可以更加便捷地实现自己的深度学习任务,快速进行模型迭代及优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值