在互联网上游荡了半天,没找到多少fastai的v1.0版本的教程,0.7的有很多,但是1.0的fastai几乎是一个全新的fastai,所以这里写下我的探索,欢迎共同探讨(我的email:1596446455@qq.com)。
加载数据集
首先是加载数据集,先将数据整理成如下格式:
然后我们加载图片数据集:
databunch = ImageDataBunch.from_folder('cifar-10-batches-py/images', valid_pct=0.1)
其中valid_pct是指使用多少百分比的数据作为验证集。
创建模型
使用刚刚的数据集,我们来创建一个常用的分类模型,使用fastai自带的create_cnn方法:
learn = create_cnn(databunch, models.resnet18, pretrained=True, metrics=[accuracy])
这是最简单的创建模型的方法,如果想要自定义模型怎么办呢:
model = nn.Sequential(nn.Linear(10, 1024), nn.ReLU(), nn.Linear(1023, 10))
learn = fastai.Learner(databunch, model, loss_func=nn.CrossEntropyLoss(),metrics=[accuracy])
寻找最佳学习率
因为模型的学习率是一个很重要的参数,而fastai给我们提供了一个自动寻找学习率的方法:
learn.lr_find()
learn.recorder.plot()
训练模型
训练模型可以使用两个方法,一个是常规的fit(),另一个是fit_one_cyc(),使用了模拟退火算法来调整lr:
learn.fit(60)
learn.fit_one_cycle(cyc_len=60, max_lr=0.001)
完整代码
import torch
from torch import nn
from torchvision import *
import fastai
from fastai import *
from fastai.vision import *
databunch = ImageDataBunch.from_folder('./images',valid_pct=0.1, bs=140,num_workers=4,size=224)
learn = create_cnn(databunch, models.resnet18, pretrained=True, metrics=[accuracy])
learn.lr_find()
learn.recorder.plot()
learn.fit_one_cycle(cyc_len=60, max_lr=0.001)
learn.save('mymodel.pytorch')