首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FastAI 之书(面向程序员的 FastAI)(三)

一旦您认为数据看起来正确,我们通常建议下一步应该使用它来训练一个简单的模型。我们经常看到人们将实际模型的训练推迟得太久。结果,他们不知道他们的基准结果是什么样的。...学习率查找器 在训练模型时,我们可以做的最重要的事情之一是确保我们有正确的学习率。如果我们的学习率太低,训练模型可能需要很多个 epoch。...发生了什么呢。优化器朝着正确的方向迈出了一步,但它迈得太远,完全超过了最小损失。多次重复这样的过程会使其越来越远,而不是越来越接近! 我们该如何找到完美的学习率——既不太高也不太低?...正如我们所看到的,PyTorch 和 fastai 有两个主要类用于表示和访问训练集或验证集: 数据集 返回单个项目的独立变量和依赖变量的元组的集合 数据加载器 提供一系列小批量的迭代器,其中每个小批量是一批独立变量和一批因变量的组合...结论 在乍一看完全不同的问题(单标签分类、多标签分类和回归)中,我们最终使用相同的模型,只是输出的数量不同。唯一改变的是损失函数,这就是为什么重要的是要仔细检查你是否为你的问题使用了正确的损失函数。

46410

FastAI 课程学习笔记 lesson 1:宠物图片分类

数据增强也许是在训练模型计算机视觉最重要的正则化技术,在训练模型时候不是每次都使用相同的图片,而是做一些小随机变换(旋转,缩放、翻译等…),不改变里面有什么图像(肉眼),但改变其像素值。...为什么会这样?...fit_one_cycle(),但是我们得到的错误率非常糟糕,为什么会这样?...现在我们在微调(fine-tuning)我们说让我们改变所有这些。我们会让他们留在原地,但让我们看看是否能让他们变得更好。 所以,如果我们能把第1层的功能做得更好,这是非常不可能的。...所以它更新那些看起来像对角线或圆圈的东西就像它更新那些有特定的狗或猫品种的特定细节的东西一样。所以我们必须改变这一点。 要改变这一点,我们需要回到以前的状态。我们刚刚打破了这个模型。

92110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    FastAI 之书(面向程序员的 FastAI)(五)

    那么,为什么我们要详细学习如何训练语言模型呢? 当然,一个原因是了解您正在使用的模型的基础知识是有帮助的。...通过这样做,我们将有另一个使用数据块 API 中的预处理器的例子。 然后我们将学习如何构建一个语言模型并训练它一段时间。...但想象一下,如果一个坏演员决定在社交网络上发布这样的算法会发生什么 - 他们可以慢慢而谨慎地这样做,让算法随着时间逐渐发展出追随者和信任。要做到这一点并不需要太多资源,就可以让成千上万的账户这样做。...这次我们要自己做。 为此,我们将重新排列我们的数据集。...问卷 如果您的项目数据集非常庞大且复杂,处理它需要大量时间,您应该怎么做? 为什么在创建语言模型之前我们要将数据集中的文档连接起来?

    55910

    FastAI 之书(面向程序员的 FastAI)(六)

    因此,要成为一名优秀的深度学习从业者,一个需要练习的技能是让 GPU 一次处理大量工作。 不要在每个轴上丢失这两个像素会很好。我们这样做的方法是添加填充,简单地在图像周围添加额外的像素。...如果一个模型在较大的学习率下训练了相当长的时间,并且在这样做时能找到一个好的损失,那么它一定找到了一个泛化良好的区域,因为它在批次之间跳动很多(这基本上就是高学习率的定义)。...这指的是切掉最后一层,该层仅负责 ImageNet 特定的分类。实际上,我们不仅切掉这一层,还切掉自自适应平均池化层以及之后的所有内容。这样做的原因很快就会变得清楚。...大多数库使用第二种公式,但 Ilya Loshchilov 和 Frank Hutter 在“解耦权重衰减正则化”中指出,第一种方法是 Adam 优化器或动量的唯一正确方法,这就是为什么 fastai...阅读 fastai 存储库中的优化器笔记本并执行它。 在哪些情况下,像 Adam 这样的动态学习率方法会改变权重衰减的行为? 训练循环的四个步骤是什么?

    1.3K10

    如何入手卷积神经网络

    深度学习的引入与其说是改变规则,不如说是在打破规则。 卷积神经网络架构 那么问题来了,卷积神经网络到底是怎么运作的呢? ? 卷积神经网络之所以优于其它深度神经网络是由于它特殊的操作。...既然我们可以处理图像、识别图像中的信息,那我们为什么不自己生成图像呢? 因吹斯汀! 生成对抗网络由此应运而生。 ? 朱俊彦等人提出的 CycleGAN 给定某些输入,这项技术可以生成对应的图片。...数据增强 这是一种根据现有数据创建更多数据的技术。一张猫的图片水平翻转之后仍然是猫的图片。但通过这样做,你可以把你的数据扩增至两倍、四倍甚至 16 倍。 如果你数据量比较少,可以尝试这种方法。...把测试数据也加入训练数据列表里,可以使稍后预测更容易,免得再进行一次预处理。记住,这些图像不能用于训练,也不可以用来做验证。这样做只是为了确保训练图片和测试图片采用了完全相同的预处理方式。...等等,怎么回事?! 验证集准确率达到了 100%!训练过程实际上是非常高效的,只用了六分钟时间。多么幸运!实际上,你可能需要数次迭代才能找到合适的算法。 我等不及要提交了!哈哈。

    69740

    如何入手卷积神经网络

    深度学习的引入与其说是改变规则,不如说是在打破规则。 卷积神经网络架构 那么问题来了,卷积神经网络到底是怎么运作的呢? ? 卷积神经网络之所以优于其它深度神经网络是由于它特殊的操作。...既然我们可以处理图像、识别图像中的信息,那我们为什么不自己生成图像呢? 因吹斯汀! 生成对抗网络由此应运而生。 ? 朱俊彦等人提出的 CycleGAN 给定某些输入,这项技术可以生成对应的图片。...数据增强 这是一种根据现有数据创建更多数据的技术。一张猫的图片水平翻转之后仍然是猫的图片。但通过这样做,你可以把你的数据扩增至两倍、四倍甚至 16 倍。 如果你数据量比较少,可以尝试这种方法。...把测试数据也加入训练数据列表里,可以使稍后预测更容易,免得再进行一次预处理。记住,这些图像不能用于训练,也不可以用来做验证。这样做只是为了确保训练图片和测试图片采用了完全相同的预处理方式。...等等,怎么回事?! 验证集准确率达到了 100%!训练过程实际上是非常高效的,只用了六分钟时间。多么幸运!实际上,你可能需要数次迭代才能找到合适的算法。 我等不及要提交了!哈哈。

    69820

    FastAI 之书(面向程序员的 FastAI)(七)

    由于我们稍微改变了我们的输入,我们需要重新定义它们: x = torch.randn(200, 100) y = torch.randn(200) 对于我们的权重,我们将使用正确的 scale,这被称为...为什么?在 Glorot 和 Bengio 撰写他们的文章时,神经网络中最流行的激活函数是双曲正切(tanh,他们使用的那个),而该初始化并没有考虑到我们的 ReLU。...我们将在这里添加两个东西:一个可选的shuffle用于训练集,以及一个ProcessPoolExecutor来并行进行预处理。并行数据加载器非常重要,因为打开和解码 JPEG 图像是一个缓慢的过程。...first(train_dl) xb.shape,yb.shape,len(train_dl) (torch.Size([128, 64, 64, 3]), torch.Size([128]), 74) 这个数据加载器的速度不比...因此,如果您正在调试一个复杂的数据加载过程,不要害怕尝试手动操作,以帮助您准确地了解发生了什么。 对于归一化,我们需要图像统计数据。

    46610

    如何用 fast.ai 高效批量推断测试集?

    如果你只是需要对单个新的数据点做推断,这确实足够了。 但是如果你要推断/预测的是一个集合,包含成千上万条数据,那么该怎么办呢? 你可能会想到,很简单,写个循环不就得了? 从道理上讲,这固然是没错的。...这篇文章里,我就来为你展示一下,具体该怎么做,才能让 fast.ai 高效批量推断测试集数据。 为了保持简洁,我这里用的是文本分类的例子。...代码 首先,你要读入 fast.ai 的文本处理包。 from fastai.text import * 注意这个包可不只是包含 fast.ai 的相关函数。...我们可以通过展示学习器 learn 的内容,来看看。 learn ? 注意下方架构的数据是完整的,但是训练集、验证集、测试集的长度,都是0。 这时候,我们就需要自己读入之前存好的分类数据了。...为什么? 因为 fast.ai 是为你参加各种学术界和业界的数据科学竞赛提供帮助的。 这些比赛里面,往往都会预先给你训练集和验证集数据。 但是测试集数据,一般都会在很晚的时候,才提供给你。

    87920

    如何用卷积神经网络构建图像?

    你接下来该怎么做呢? 卷积神经网络教程 那么,让我们开始吧。你会发现开始学习这门课程非常容易,容易到爆。但完全掌握它又是另外一回事。 我们现在暂时把完全掌握放到一边。...方法创建一个加载器来将train_df中的data frame与train文件夹中的图片关联起来。...但是,请记住训练集数据不会用于训练,也不会归为验证集。这样做只是为了使所有数据采用相同的规则化方式。...但是当训练所有DNN和CNN的时候,都会有这样一个疑惑,学习率选多大呢?有一个算法叫做梯度下降,它能随着学习率减小误差。 ? 如果学习率过大,可能倾向于越过边界。...想左图显示的那样,这可能导致误差非常大。但是如果学习率过小,训练会非常慢,但是误差不会失控。 因此,选择正确的学习率至关重要,要选取一个足够大、但不会大到使误差失控的学习率。

    89430

    FastAI 之书(面向程序员的 FastAI)(一)

    深度学习中最困难的部分是手工制作的:你如何知道你是否有足够的数据,数据是否以正确的格式存在,你的模型是否正确训练,如果不正确,你应该怎么做?这就是为什么我们相信通过实践学习。...如果不提供验证集,fastai 会怎么做? 我们总是可以使用随机样本作为验证集吗?为什么或为什么不? 什么是过拟合?举个例子。 什么是度量?它与损失有什么不同?...从数据到数据加载器 DataLoaders是一个简单的类,只是存储您传递给它的DataLoader对象,并将它们作为train和valid可用。...保存模型的最简单方法是保存这两部分,因为这样,当您加载模型时,您可以确保具有匹配的架构和参数。要保存这两部分,请使用export方法。 这种方法甚至保存了如何创建您的DataLoaders的定义。...要从导出的文件创建我们的推理学习者,我们使用load_learner(在这种情况下,这并不是真正必要的,因为我们已经在笔记本中有一个工作的Learner;我们在这里这样做是为了让您看到整个过程的始终):

    59220

    如何用 Python 和 BERT 做中文文本二元分类?

    这花费包括但不限于: 存数据 买(甚至开发)运算设备 训练模型(以天甚至月计) 聘用专业人员 …… 预训练就是指他们训练好之后,把这种结果开放出来。...Google 的 BERT 样例编写者怎么就不肯做? 从 Tensorflow 1.0 到 2.0,为什么变动会这么大?不就是因为 2.0 才是给人用的吗?...你不肯把界面做得清爽简单,你的竞争者(TuriCreate 和 fast.ai)会做,而且做得非常好。实在坐不住了,才肯降尊纡贵,给普通人开发一个好用的界面。 教训啊!为什么就不肯吸取呢?...这跟你的数据量和训练轮数设置有关。 在这个过程中,你可以看到,程序首先帮助你把原先的中文文本,变成了 BERT 可以理解的输入数据格式。 ?...在这样小规模数据集上,达到这样的准确度,不容易。 BERT 性能之强悍,可见一斑。 小结 讲到这里,你已经学会了如何用 BERT 来做中文文本二元分类任务了。希望你会跟我一样开心。

    1.1K20

    如何用 Python 和 BERT 做中文文本二元分类?

    这花费包括但不限于: 存数据 买(甚至开发)运算设备 训练模型(以天甚至月计) 聘用专业人员 …… 预训练就是指他们训练好之后,把这种结果开放出来。...Google 的 BERT 样例编写者怎么就不肯做? 从 Tensorflow 1.0 到 2.0,为什么变动会这么大?不就是因为 2.0 才是给人用的吗?...你不肯把界面做得清爽简单,你的竞争者(TuriCreate 和 fast.ai)会做,而且做得非常好。实在坐不住了,才肯降尊纡贵,给普通人开发一个好用的界面。 教训啊!为什么就不肯吸取呢?...train = train.sample(len(train)) 这时再来看看我们训练集的头部内容。 train.head() 如果你后面要替换上自己的数据集,请注意格式。...在这样小规模数据集上,达到这样的准确度,不容易。 BERT 性能之强悍,可见一斑。 小结 讲到这里,你已经学会了如何用 BERT 来做中文文本二元分类任务了。希望你会跟我一样开心。

    1.6K30

    使用 FastAI 和即时频率变换进行音频分类

    随着v1版的发布,该版本中带有一个data_block的API,它允许用户灵活地简化数据加载过程。...今年夏天我参加了Kaggle举办的Freesound General-Purpose Audio Tagging 竞赛,后来我决定调整其中一些代码,利用fastai的便利做音频分类。...利用fastai提供的ClassificationInterpretation类,可以快速查看错误是从哪来的,如下: interp = ClassificationInterpretation.from_learner...有了这些信息,我们可以更进一步查看这些乐器的频谱数据,看看是否可以调整参数,从而更好的分辨它们。 为什么在训练过程中生成频谱?...磁盘空间 同样的每次生成数据集后,数据集就会占用大量磁盘空间,大小依赖于数据集以及变换。本例中,生成的数据占了1G空间。 数据增强 提升图像分类器性能的一个最有效的策略是采用数据增强。

    1.8K40

    FastAI 之书(面向程序员的 FastAI)(四)

    为什么呢?如果我们仔细观察这两次训练,我们会发现验证损失在中间停止改善并开始变差。正如我们所见,这是过拟合的明显迹象。在这种情况下,没有办法使用数据增强,所以我们将不得不使用另一种正则化技术。...一个有帮助的方法是权重衰减。 Weight Decay 权重衰减,或L2 正则化,包括将所有权重的平方和添加到损失函数中。为什么这样做?...在这种特殊情况下,很明显您有一个代表性偏见的问题,但如果偏见发生在潜在因素中,可能一点也不明显。 这样的问题可能会改变您的用户群体的整体构成,以及您系统的行为。这特别是由于正反馈循环。...,尽管这并没有在模型结果上有任何显著的改变。...我们对每棵树都这样做,并将每个分割变量的重要性变化相加。

    44710

    在 fast.ai 课堂上,我总结的 8 个深度学习最佳实践

    from fastai.imports import * from fastai.transforms import * from fastai.conv_learner import * from fastai.model...当模型具有高精度时,保存模型的编码器,并使用从编码器获得的嵌入来构建情感分析模型。这比从词向量获得的嵌入矩阵更好,因为 RNN 可以比词向量更好地跟踪更大范围的依赖性。 7....它可以学习周期性事件,比如在很多年的数据集上,公众假期之前和之后,一周中的哪一天有最多的事情。这样做的最终结果是在预测产品最优定价和协同筛选的一个非常有效的方法。...这应该是所有拥有表格数据公司的标准数据分析和预测方法。所有的公司都应该使用这个。...他们在本文( this paper )概述了他们的方法。 ?

    1.3K120

    fast.ai 深度学习笔记(二)

    我们不必这样做。您可以设置xtra_fc参数。...如果我们只删除了一半的激活,那么接下来以它们作为输入的激活也会减半,以及之后的所有激活。例如,如果这大于 0.6,则毛茸茸的耳朵是毛茸茸的,现在只有大于 0.3 才是毛茸茸的-这改变了含义。...,尽管我们可以将它们视为连续的,但我们不必这样做。...例如,Pinterest 和 Instacart 就是这样做的。Instacart 使用这种技术来为他们的购物者规划路线,Pinterest 使用它来决定在网页上显示什么。...他认为这是可以做到的,但还没有看到有人这样做。辍学所做的事情与以前完全相同。 问题:有什么缺点?几乎没有人在使用这个。为什么?

    25510

    如何在 fast.ai 用 BERT 做中文文本分类?

    也就是说,他们提供了一个完整版的模型架构,只要配上相应的数据和损失函数, fast.ai 就可以开工了!...你的想象空间,也就可以因此而开启了。 能不能用这些基于 Transformer 的预训练模型,来做自己的下游任务呢? 一如既往, Huggingface 的技术还是那么过硬。...这是必要的。 我尝试了一下,如果按照默认值,不提这两个参数,那么二者默认都是 None 。这样一来,数据预处理结果就会成这样。 ? 这和我们需要的结果,不一致。所以此处需要留意。...loss_func = nn.CrossEntropyLoss() 三大要素聚齐,我们终于可以构建学习器 Learner 了。...预训练模型; 如何把自己的数据、架构和损失函数封装在 fast.ai 学习器中。

    1.6K30

    fast.ai 深度学习笔记(一)

    在早期,你希望它这样做,因为它试图找到一个更平滑的位置,但后来,你希望它做更多的探索。这就是为什么cycle_mult=2似乎是一个好方法。 我们正在引入越来越多的超参数,告诉你没有很多。...最后,我们解冻,这意味着“好的,现在您可以继续更改所有这些早期卷积滤波器”。 问题:为什么不从一开始就将precompute=False设置为假?...,Keras 也这样做。...dl是一个数据加载器,它会给你一个小批量,特别是转换后的小批量。使用数据加载器,你不能要求一个特定的小批量;你只能得到next小批量。在 Python 中,它被称为“生成器”或“迭代器”。...问题:为什么我们不从不同的学习率开始训练,而是只训练最后的层?[01:50:30] 您可以跳过训练最后一层,直接进行不同的学习率,但您可能不想这样做。

    27211

    学 Python ,能提升你的竞争力吗?

    这样的一个正反馈循环,就像在滚雪球。 ? 你可能很为那些好不容易掌握用 Matlab 做机器学习的人鸣不平,似乎他们才是会真功夫的人。而学了 Python 的人,都有作弊之嫌。 才不会。...你猜群众的反馈是啥? 排在第一位的,是这样: ? 为什么?人家好心好意给你书,你为何不要? 看这个曲线。 ?...这网络里面,包括为你打造工具的高手们,为你提供教程的人,也包括你潜在的合作伙伴…… 你是希望自己的网络大一些,还是小一些呢? 方法 了解了 Python 的特点,你也就大略知道,该怎么去学它了。...其实你看现在那些好的 MOOC 里面(主题包括但不限于数据分析、数据可视化、机器学习、深度学习……), Python 学习大概是怎么做的。...说实话,这机会不好碰到,说不定有人甚至会感谢你的提问呢。 ? 你看,这样一来,你的技能来自于对真实问题的挑战,这样学起来,你的动力更足,学会之后你的满足感更强。而且,你的记忆,会更加深刻。

    80330

    如何设置合适的 batch 大小收获 4 倍加速 & 更好的泛化效果

    提醒一下,Fastai 中使用的学习速率查找器通过测试不同的学习速率来确定能最大程度地减少损失的数值,从而帮助找到正确的学习速率。...,我建立了一个 Fastai 环境,在 MNIST 上运行一个模型,因为这个数据集已经在论文中进行了测试,他们得到了平均 900 的简单噪声等级。...因为我们很可能设置不同,我也无法访问他们的代码,所以我们的结果略有不同,但是在论文中,作者提到了一个简单的噪声等级,从 50 开始,达到 900,这才是重要的。...这里的参数对应关系是: learn:一个 Fastai 学习器 lr:可以使用 lr_find()找到执行训练循环的学习速率 num_it:你要处理的批数,可以设置为 None,它将在一个时间段内自动训练...-rossmann.ipynb 在这里,我将简单地运行我的 batch 大小查找器,并做与原来完全相同的训练,但 batch 大小要考虑到简单噪声比例。

    1.7K20
    领券