fast比赛_大数据竞赛

fast比赛_大数据竞赛以Kaggle比赛为例讲解Fastai的具体比赛中Pipeline构建方法。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

竞赛实战

简介

可以说,Fastai的出现给Kaggle上很多以迁移学习为主的比赛带来了新的方法,冲击了很多传统框架,因为Fastai的封装更多更详细,使用者更方便。本文以一个简单的分类赛为例,介绍如何在Kaggle中使用Fastai取得不错的成绩。本文只列举代码的细节,主要是Fastai解决视觉问题的Pipeline,具体框架用法不多设计,我的系列博客已经具体讲解了。

赛题

比赛链接,老生常谈的MNIST手写体分类,是Kaggle上一个入门级别的赛事,关于Kaggle赛事级别类型等可以参考我的博客

由于给出的数据集为表格数据,预先处理为了本地的JPG图片并按照ImageNet数据集的风格进行文件存储,方便Fastai
读取。

数据准备

本地数据集的存放格式如下。

mnist\
    train\
        0\
        1\
        2\
        ...
        9\
    test\

Fastai要读取这个数据集非常简单,使用ImageDataBunchfrom_folder方法即可,读取之后这里按照ImageNet的统计信息进行了标准化。

tfms = transform.get_transforms(do_flip=False, max_rotate=5.0)  # 数据变换

db = ImageDataBunch.from_folder(
    "../train/",
    test="../test/",
    valid_pct=0.15,  # 划分训练集
    bs=64,
    size=224,
    ds_tfms=tfms,
)
db = db.normalize(imagenet_stats)

得到的数据集输出信息如下。

ImageDataBunch;

Train: LabelList (35700 items)
x: ImageList
Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)
y: CategoryList
5,5,5,5,5
Path: ../train;

Valid: LabelList (6300 items)
x: ImageList
Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)
y: CategoryList
5,9,9,9,0
Path: ../train;

Test: LabelList (28000 items)
x: ImageList
Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)
y: EmptyLabelList
,,,,
Path: ../train

学习器构建

通过cnn_learner方法根据resnet模型构建学习器并采用在Imagenet上预训练的参数,成功构建学习器。

learn = learner.cnn_learner(db, models.wide_resnet50_2, metrics=[accuracy, ], model_dir="/tmp/models", callback_fns=ShowGraph)

上面设置了数据集、模型、指标、模型存放地址以及预先添加的回调,这种回调添加方式表示自动依据当前learner创建默认参数的回调对象而不必像fit时那样初始化对象,通常,这种方法更加普遍。

模型训练

首先通过LR_Finder来搜索合适的学习率(只需要调用学习器的lr_find方法),最后确定了合适的学习率区间。

learn.unfreeze()  # 解冻所有层
learn.lr_find()  # 迭代找寻最优学习率
learn.recorder.plot()

在这里插入图片描述

接着,按照合适的学习率区间使用one cycle策略进行50轮的训练(解冻所有层),结果如下。

在这里插入图片描述

推理分析

利用learner生成解释器,可视化识别最差的图片以及混淆矩阵。

interpreter.plot_top_losses(6)

在这里插入图片描述

interpreter.plot_confusion_matrix()

在这里插入图片描述

然后,进行测试集上的结果推理,这里注意的是数据集读取的API不是按照要求输出的编号顺序来的,是乱序的,输出的时候要纠正顺序再写入提交的csv文件。

score, y = learn.get_preds(fastai.vision.DatasetType.Test)
lab = np.argmax(score, axis=1)
Id = [int(os.path.splitext(filename)[0]) + 1 for filename in os.listdir(test_folder)]   # 还原id
df_submit['ImageId'] = Id
df_submit['Label'] = lab

结果提交

得到了合适的CSV文件就可以在平台上进行提交,平台很快会给出public测试的分数,本比赛采用的是准确率作为指标,上述数十行代码获得的得分为0.99700,排名为161/2292,而这只是一个baseline代码,这说明,fastai在比赛这个领域是非常实用的框架,且它支持PyTorch的一切功能,对PyTorch的用户也非常友好。

在这里插入图片描述

补充说明

本文主要演示了使用Fastai在比赛中如何构建一个Pipeline的baseline,具体代码开源于我的Github,欢迎star或者fork。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196202.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hihoCoder – 1082 – 然而沼跃鱼早就看穿了一切 (字符串处理!!)

    hihoCoder – 1082 – 然而沼跃鱼早就看穿了一切 (字符串处理!!)

    2022年2月5日
    53
  • git 删除本地分支命令_git强制删除远程分支

    git 删除本地分支命令_git强制删除远程分支git删除本地无用分支

    2022年10月17日
    2
  • 轻松学习java可重入锁(ReentrantLock)的实现原理

    轻松学习java可重入锁(ReentrantLock)的实现原理前言相信学过java的人都知道synchronized这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么实现的。如果真是这样,而且你有兴趣了解,今天我将带领你轻松的学习下java中非常重要,也非常基础的可重入锁-ReentrantLock的实现机制。

    2022年6月26日
    32
  • python怎么用反三角函数_反三角函数怎么用

    展开全部已知:cosα32313133353236313431303231363533e4b893e5b19e31333366303132=3/5,求α。解:已知:cosα=3/5有:α=arccos(3/5)经查表(或按计算器),得:α≈53.13010235°,或:α≈323.13010235°考虑到三角函数的周期性,得:α≈360°×k+53.13010235°,或:α≈360°×k+323…

    2022年4月7日
    71
  • PHP一句话木马后门

    PHP一句话木马后门在我们进行渗透测试的最后阶段,入侵到内网里,无论是想要浏览网站结构,还是抓取数据库,或者是挂个木马等等,到最后最常用的就是执行一句话木马,从客户端轻松连接服务器。一句话木马的原理很简单,造型也很简单,所以造成了它理解起来容易,抵御起来也容易。于是黑白的较量变成了黑帽不断的构造变形的后门,去隐蔽特征,而白帽则不断的更新过滤方法,建起更高的城墙。一、原理简述对于不同的语言有不同的构造方法。…

    2022年5月21日
    81
  • lm算法是什么算法_opencv图像处理算法

    lm算法是什么算法_opencv图像处理算法1.高斯牛顿法残差函数f(x)为非线性函数,对其一阶泰勒近似有:这里的J是残差函数f的雅可比矩阵,带入损失函数的:令其一阶导等于0,得:这就是论文里常看到的normalequation。2.LMLM是对高斯牛顿法进行了改进,在求解过程中引入了阻尼因子:2.1阻尼因子的作用:2.2阻尼因子的初始值选取:一个简单的策略就是:2.3阻尼因子的更新策略3.核心代码讲解3.1构建H矩阵void…

    2022年10月1日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号