在你的催化剂训练中逐渐增加斋戒良善
fastai.vision.all进口*

催化剂的代码

我们将使用Catalyst自述文件(2020年8月)中的MNIST训练代码,转换成一个模块。

migrating_catalyst进口*

为了在fastai中使用它,我们首先将催化剂dict转化为aDataLoaders对象:

数据=DataLoaders(加载器(“火车”),加载器(“有效”]).cuda()

使用回调函数

在Catalyst代码中,我们手动定义了一个训练循环,也就是将输入张量扁平化的地方。在fastai中,没有必要定义你自己的训练循环-你可以使用回调将你自己的代码插入到训练过程的任何部分,它甚至可以修改数据,梯度,损失函数,或训练循环中的任何其他东西:

@before_batch_cbdefcb(自我,xb,yb):返回(xb(0].视图(xb(0].大小(0),-1),),yb

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

指标=(精度,top_k_accuracy]学习=学习者(数据,模型,loss_func=F.cross_entropy,opt_func=亚当,指标=指标,哥伦比亚广播公司=cb)

现在可以套用模型了。fastai支持许多调度器。我们建议使用1cycle:

学习.fit_one_cycle(1,0.02)
时代 train_loss valid_loss 精度 top_k_accuracy 时间
0 0.230145 0.292590 0.924700 0.995000 00:13

如您所见,从Catalyst迁移允许我们替换17行代码(in)CustomRunner)只有3行,并且不需要你改变任何你现有的数据管道,优化器,损失函数,模型,等等。一旦进行了此更改,您就可以从fastai丰富的回调、转换、可视化等等中获益。

注意fastai非常不同于催化剂,它不仅仅是一个训练循环(虽然我们只使用训练循环在这个例子中)——它是一个完整的框架包括GPU-accelerated转换、端到端推理,综合应用视野,文字,表格,和协作过滤,等等。可以单独使用框架的任何部分,也可以将它们组合在一起,如fastai纸.

改变模型

在这种情况下,您还可以简单地更改模型,而不是使用回调。这里我们把视图()跳出训练循环,进入模型,使用fastai的层:

模型=神经网络.顺序((),火炬.神经网络.线性(28*28,10))

我们现在可以创建a学习者和训练不使用任何回调:

学习=学习者(数据,模型,loss_func=F.cross_entropy,opt_func=亚当,指标=指标)学习.fit_one_cycle(1,0.02)
时代 train_loss valid_loss 精度 top_k_accuracy 时间
0 0.230051 0.292577 0.924800 0.995100 00:11