逐步增加fastai善良到你的闪电培训

我们要(在八2020年)使用来自闪电的“快速启动”的MNIST训练码,转换为一个模块。看到migrating_lightning.py对闪电的代码,我们导入这里。

migrating_lightning进口*fastai.vision.all进口*

使用fastai的训练循环

我们可以直接使用防雷模块:

模型=LitModel()

要在fastai使用它,我们首先从模块到拉DataLoadersDataLoaders目的:

数据=DataLoaders模型train_dataloader(),模型val_dataloader())CUDA()

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

学习=学习者数据模型loss_func=Fcross_entropyopt_func=亚当指标=准确性学习fit_one_cycle10.001
时代 train_loss valid_loss 准确性 时间
0 0.367197 0.333293 0.910800 00:11

正如你所看到的,从闪电迁移使我们能够减少代码量,并没有要求你改变任何现有的数据管道,优化,损失函数,模型等,一旦你做了这个变化,你然后可以从fastai的丰富的回调,变换,可视化等受益。

例如,在闪电例如,Tensorboard载体定义的特殊情况下的“记录器”。在fastai,Tensorboard只不过是另一种打回来您可以添加,用参数CBS = Tensorboard当您创建学习者。回调所有一起工作,这样你就可以添加删除任何调度,记录仪,可视化工具,等等。你不必了解特殊类型的功能,每个 - 他们都只是普通的回调。

需要注意的是fastai是闪电很大的不同,因为它不仅仅是一个训练循环更(尽管我们只使用本示例中的训练循环) - 这是包括GPU加速转换的完整框架,端到最终推断,集成了视觉,文字,表格和协同过滤的应用,等等。您可以使用该框架的任何部分自身,或者将它们组合在一起,如描述fastai纸

以fastai数据块的优势

在闪电例子的一个问题是,它并没有实际使用验证组 - 它只是使用训练树立了第二次的验证集。

你可能更愿意使用fastai的数据块API,这使得它可以很容易地创建,可视化和测试输入数据处理。这里是你如何创建MNIST输入数据,例如:

MNIST=数据块=ImageBlockCLS=PILImageBWCategoryBlockget_items=get_image_files分离器=GrandparentSplitter(),get_y=PARENT_LABEL

在这里,我们告诉数据块我们有一个B&W图像输入和输出的范畴,我们的输入项目,该图像是基于父文件夹的名称标记的图像文件名,他们是通过训练VS基于祖父文件夹名称验证分裂。它实际上看你的数据,所以fastai也可以很容易地想象你的投入和产出,比如很重要:

DLS=MNISTdataloadersuntar_data网址MNIST_TINY))DLSshow_batchMAX_N=9figsize=44))