这篇文章会教大家在kaggle上使用fastai v1.0来进行图片分类。
kaggle是一个在数据挖掘领域非常著名的网站,数据研究人员可以在这个数据平台上,操练和竞赛各种算法。个人感觉其中传统机器学习以特征工程为主,深度学习则是以各种模型的组合之间的较量。总之,kaggle是一个十分不错的技术交流平台:)
kaggle有很多功能,其中也内置了notebook,我们来看看界面
ok有了之前的colab的notebook,这里改成kaggle notebook就十分简单啦。
看看怎么做吧~
1.变更配置
位于界面的最右下角,我们可以看到setting面板。
- 改变language属性,设置为python
- 改变GPU属性,打开GPU
- 改变internet属性,允许下载一些互联网资源
2.增加数据集(可选)
位于界面的右边中间,可以看到Draft Environment面板。
点击Add Data,我们可以搜索找到Dog Breed Identification数据集,直接添加数据集就可以得到如图所示的目录结构。注意这个input目录是一个只读的目录。
如果你是从外部导入数据集的话,这里就可以跳过啦。
3.设置matplotlib内联(也就是不弹出对话框显示)
%reload_ext autoreload
%autoreload 2
%matplotlib inline
这样做是为了和notebook兼容
4.导入fastai包
from fastai import *
from fastai.vision import *
5.检测GPU环境
print(torch.cuda.is_available(), torch.backends.cudnn.enabled)
返回6.设置目录
path_model='/kaggle/working/'
path_input="/kaggle/input/"
label_df = pd.read_csv(f"{path_input}labels.csv")
label_df.head()
返回7.从csv导入数据
data = ImageDataBunch.from_csv(
path_out,
folder='train',
valid_pct=0.2,
ds_tfms=get_transforms(flip_vert=True,max_rotate=10., max_zoom=1.1),
size=224,
test='/kaggle/input/test/test',
suffix='.jpg',
bs=64,
num_workers=0).normalize(imagenet_stats)
这里需要注意的是最后一个参数num_workers=0不能缺少,不然kaggle notebook就会报错,博主在这里被坑了很久~
8.测试一下导入的数据
data.show_batch(rows=3, figsize=(7,6))
能看到图就说明一切正常。
9.创建神经网络
learner = cnn_learner(data,models.resnet50,metrics=[accuracy],model_dir=f'{path_model}')
返回另外kaggle notebook还提供了一个console窗口,可以看到一些更加实时的反馈信息
10.微调网络
learner.fit_one_cycle(3)
这里选取了3个epoch
可以看到最后accuracy为84%
嘿嘿。好啦,到这里差不多可以休息一下,是不是也很简单:)
之后就是预测和提交成果物,上榜咯。
如果有问题,欢迎来评论区留言讨论^^
相关链接
使用fastai进行图像分类之120种小狗
120-dogbreeds-fast-ai-v1-0-x
如何在kaggle上使用fastai v1.0(下)