from fastai.vision.all import *
从纯 PyTorch 到 fastai
逐步将 fastai 的优点添加到您的 PyTorch 模型中
我们将使用来自 PyTorch 官方示例的 MNIST 训练代码,为了节省空间略有重新格式化,从 AdaDelta 更新到 AdamW,并从脚本转换为模块。代码量很大,因此我们将其放在 migrating_pytorch.py 文件中!
注意
如果您从 git 克隆了 fastai 仓库,则 migrating_pytorch
的源代码脚本位于此文件夹的 examples
子目录中;如果您使用在线查看器(如 Colab),则可以从此处下载。
from migrating_pytorch import *
我们可以完全用 fastai 的训练循环替换自定义训练循环。这意味着您可以删除原始代码中的 train()
、test()
和 epoch 循环,并全部替换为以下内容
= DataLoaders(train_loader, test_loader)
data = Learner(data, Net(), loss_func=F.nll_loss, opt_func=Adam, metrics=accuracy) learn
数据会根据可用资源自动移动到 GPU 或 CPU,无需额外的回调或开销。
fastai 支持许多调度器。我们推荐使用 One Cycle 训练法进行拟合
learn.fit_one_cycle(epochs, lr)
周期 | 训练损失 | 验证损失 | 准确率 | 时间 |
---|---|---|---|---|
0 | 0.130664 | 0.049394 | 0.984200 | 01:16 |
如您所见,从纯 PyTorch 迁移可以删除大量代码,并且无需更改任何现有数据管道、优化器、损失函数、模型等。
完成此更改后,您就可以受益于 fastai 丰富的回调、变换、可视化等功能。
请注意,fastai 远不止是一个训练循环(尽管在此示例中我们只使用了训练循环)——它是一个完整的框架,包括 GPU 加速的变换、端到端推理、集成的视觉、文本、表格和协同过滤应用等。您可以单独使用框架的任何部分,也可以将它们组合使用,就像fastai 论文中描述的那样。