fastai v2库是一个致力于使神经网络再次变得不酷的非盈利组织,由Jeremy Howard、Rachel Thomas和Sylvain Gugger领导的团队开发。他们的目标是让全世界的任何人都能理解、接触并使用人工智能。该团队通过在不同的抽象层次上开发他们的技术栈,来实现人工智能的民主化。
在最顶层,fastai v2库允许用户仅用几行代码就能执行复杂的人工智能任务,例如在计算机视觉和自然语言处理中。例如,如果想在fastai中训练一个模型来语义分割图像的一部分,它可以像几行代码一样快速。这种高级抽象让人想起Facebook的Detectron2、TensorFlow的目标检测库或Hugging Face的Transformers。fastai中的高级抽象使得新用户可以非常快速地开始,并迅速看到他们创造的影响。
中级层次允许用户随着对库的熟悉程度增加而进行更多的定制。这是数据加载器和可定制训练循环等事物的所在地(稍后会有更多内容)。随着想要为库调整自己的用途并做出贡献,可以在这里做到。
最后,最深的底层深入到为GPU执行和优化的操作。这使得深度学习研究人员可以在NVIDIA和CuDNN提供功能之前,调整低级配置并运行实验。
fastai v2通过在之前的库中构建更多的灵活性和易用性,扩展了流行的fastai库。fastai v2在各个领域之间保持一致性,这意味着学生和研究人员可以使用该库进行从小任务到小任务的小型迁移,以及从自然语言处理到计算机视觉的大规模迁移。
fastai建立在PyTorch之上,fastai v2中的许多增强功能都是在基本的PyTorch功能之上构建和更新的。
对fastai库最兴奋的功能是fastai v2的无限训练循环。它并不是指训练会永远运行。训练是快速的。相反,它是无限的,因为可以用无数种方式来定制它。
在PyTorch中,典型的训练循环可能看起来像这样:
# PyTorch中典型的训练循环
for epoch in range(num_epochs):
for batch in dataloader:
preds = model(batch)
loss = loss_fn(preds, batch)
loss.backward()
optimizer.step()
如果想在这个训练循环之上实现定制(比如说实现混合精度训练或MixUp数据增强),可能会插入代码段来实现定制。这可能会变得相当复杂,并且很难传递给下一个研究人员,或者以后用新的调整来编辑。
为了解决这个问题,fastai构建了无限训练循环,通过在循环中间放置回调函数,允许程序员插入新技术。
# 使用回调函数实现无限可定制的训练循环
from fastai.callback.all import *
learn = Learner(model, data, loss_fn, opt)
learn.fit_one_cycle(1, callbacks=[MixedPrecision()])
通过导入回调函数,可以在代码库中分离它们,混合和匹配,并通过贡献来共享它们。
图像增强通过对原始训练集图像进行微调来生成额外的训练数据。例如,可以通过执行随机裁剪、随机旋转和翻转来增强训练数据。fastai v2库支持计算机视觉中的大多数增强,并在每个批次的训练中通过GPU加速执行这些增强。
这些只是fastai新库的一些亮点。如果想深入了解,强烈推荐深入研究并阅读。
一个改进的深度学习框架还不够,所以fastai还发布了一些辅助库来支持他们的新库和课程。这些包括fastcore、fastscript和fastgpu。
fastcore从其他语言中添加了Python的功能,使fastai变得更好。它还为流行的Python库如numpy添加了一些缺失的功能。
fastscript是一个特殊的脚本语言,它使开发者能够轻松地将他们的Python代码打包并共享为简单的CLI输入命令。
fastgpu是一个方便的库,用于编排GPU。
所有这些中最好的部分是Jeremy和Sylvain录制了一系列讲座,解释了机器学习的基础,并使用他们的新库实现了技术。