在您的Lightning训练中逐步增加Fastai优点
 

We're going to use the MNIST training code from 闪电's 'Quick Start' (as at August 2020), converted to a module. See migrating_lightning.py for the 闪电 code we are importing here.

from migrating_lightning import *

from 法泰.vision.all import *

使用fastai的训练循环

我们可以直接使用闪电模块:

model = LitModel()

要在fastai中使用它,我们首先将DataLoader从模块中拉到 数据加载器s 目的:

data = 数据加载器s(model.train_dataloader(), model.val_dataloader()).cuda()

我们现在可以创建一个 学习者 适合:

learn = 学习者(data, model, loss_func=F.cross_entropy, opt_func=Adam, metrics=准确性)
learn.fit_one_cycle(1, 0.001)
时代 train_loss 有效损失 准确性 时间
0 0.367197 0.333293 0.910800 00:11

如您所见,从Lightning迁移使我们减少了代码量,并且不需要更改任何现有的数据管道,优化器,损失函数,模型等。进行了此更改之后,您可以然后可以从fastai丰富的回调,转换,可视化等集合中受益。

例如,在Lightning示例中,Tensorboard支持被定义为特殊情况的“记录器”。在Fastai中,Tensorboard只是另一个 Callback that you can add, with the parameter cbs=Tensorboard, when you create your 学习者。所有回调都可以一起使用,因此您可以添加删除所有调度程序,记录器,可视化器等。您不必了解每种功能的特殊类型-它们都只是简单的回调。

请注意,fastai与Lightning的区别非常大,它不仅仅是一个训练循环(尽管在此示例中我们仅使用训练循环)-它是一个完整的框架,包括GPU加速的转换,端到端的转换。终端推理,视觉,文本,表格和协作过滤等集成应用程序。您可以单独使用框架的任何部分,也可以将它们组合在一起,如 法纸.

利用Fastai数据块

闪电示例中的一个问题是它实际上没有使用验证集-只是第二次使用训练集作为验证集。

您可能更喜欢使用fastai的Data Block API,这使创建,可视化和测试输入数据处理变得非常容易。例如,这是如何为MNIST创建输入数据的方法:

mnist = 数据Block(blocks=(ImageBlock(cls=PILImageBW), CategoryBlock), 
                  get_items=get_image_files, 
                  splitter=GrandparentSplitter(),
                  get_y=parent_label)

在这里,我们告诉 数据Block 我们有一个B&在图像输入和类别输出中,我们的输入项是图像的文件名,图像根据父文件夹的名称进行标记,并通过训练与基于祖父母文件夹名称的验证进行拆分。实际查看您的数据很重要,因此fastai还可轻松使您的输入和输出可视化,例如:

dls = mnist.dataloaders(untar_data(URLs.MNIST_TINY))
dls.show_batch(max_n=9, figsize=(4,4))