在您的Catalyst培训中逐步增加Fastai优点
 
from 法泰.vision.all import *

催化剂代码

我们将使用Catalyst的README(截至2020年8月)中的MNIST培训代码,并将其转换为模块。

from migrating_catalyst import *

要在Fastai中使用它,我们首先将Catalyst dict转换为 数据加载器s object:

data = 数据加载器s(loaders['train'], loaders['valid']).cuda()

使用回调

在Catalyst代码中,手动定义了一个训练循环,在该循环中,输入张量被展平。在fastai中,无需定义自己的训练循环-您可以通过使用回调将自己的代码插入训练过程的任何部分,该回调甚至可以修改数据,渐变,损失函数或训练循环中的任何其他内容:

@before_batch_cb
def cb(self, xb, yb): return (xb[0].view(xb[0].size(0), -1),),yb

催化剂示例还修改了训练循环以添加指标,但是您可以将这些指标直接传递给您的 学习者 in fastai:

metrics=[准确性,top_k_accuracy]
learn = 学习者(data, model, loss_func=F.cross_entropy, opt_func=Adam,
                metrics=metrics, cbs=cb)

您现在可以拟合模型。 fastai支持许多调度程序。我们建议使用1cycle:

learn.fit_one_cycle(1, 0.02)
时代 train_loss 有效损失 准确性 top_k_accuracy 时间
0 0.230145 0.292590 0.924700 0.995000 00:13

As you can see, migrating from Catalyst allowed us to replace 17 lines of code (in CustomRunner) with just 3 lines, and doesn't require you to change any of your existing data pipelines, optimizers, loss functions, models, etc. Once you've made this change, you can then benefit from fastai's rich set of callbacks, transforms, visualizations, and so forth.

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

改变模型

Instead of using callbacks, in this case you can also simply change the model. Here we pull the view() out of the training loop, and into the model, using fastai's Flatten layer:

model = nn.Sequential(
    Flatten(),
    torch.nn.Linear(28 * 28, 10))

我们现在可以创建一个 学习者 并在不使用任何回调的情况下进行训练:

learn = 学习者(data, model, loss_func=F.cross_entropy, opt_func=Adam, metrics=metrics)
learn.fit_one_cycle(1, 0.02)
时代 train_loss 有效损失 准确性 top_k_accuracy 时间
0 0.230051 0.292577 0.924800 0.995100 00:11