您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    竞赛比完代码模型怎样处置?Kaggle大神:别删,这都是宝藏
    时间:2020-09-28 21:25 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    那些被遗忘的竞赛项目代码、权重能够也是一笔宝藏。

    很多人能够参加过许多比赛,做过许多项目,但比赛或项目完毕之后,曾经写过的代码、用过的模型就被丢到了一边,甚至不久就被删掉。

    这种状况并不只存在于比赛中,在学术范围异样存在。领先生训练完模型、写完论文并被学术会议接纳后,该模型的 pipeline 就会被丢弃,训练数据也随之被删除。这是不是有点太惋惜了?

    长期参加 Kaggle 比赛的 Vladimir Iglovikov 在本人的博客中指出了这个成绩,并提出了一些重新应用这些资源的建议。

    Vladimir Iglovikov 是一位 Kaggle Grandmaster,曾在 Kaggle 全球榜单中排名第 19,拿到过 Carvana 图像遮盖应战的冠军(他的团体阅历参见:《Kaggle Grandmaster 是怎样炼成的》)。

    竞赛比完代码模型怎样处置?Kaggle大神:别删,这都是宝藏

    在他看来,竞赛中曾经用到的代码、权重等资源是一笔宝贵的财富,可以协助你稳固技术知识、树立团体品牌、提高失业时机

    为了解释这些资源资源的价值,他还专门创立了一个 GitHub 项目(retinaface)来讲述文本的建议。

    项目链接:https://github.com/ternaus/retinaface

    以下是博客的详细内容。

    花 5 分钟将代码发布到地下的 GitHub 存储库

    很多时分,你的代码能够曾经存到 GitHub 上了,但是是存在公家库里。那地下又有什么损失呢?

    某些状况下,有些代码确实不宜地下,但你在 Kaggle 里做的那些练手项目、处置方案和论文或许没这个必要。

    为什么有些人不愿地下呢?由于很多人以为,「一切地下发布的代码都应该是完美的,否则就会遭到批判。」

    但实践状况是,其别人基本不 care,你尽管发布就行。

    地下代码是心思防线的一次严重打破,地下不完美的代码更是一个自信、大胆的举动。一切后续步骤也都在这一步的基础上展开。

    花 20 分钟提升代码可读性

    你可以经过添加语法格式化工具和反省工具来提升 python 代码的可读性。

    这并不困难,也并不费时。反省工具和格式化顺序不会将烂代码变成好代码,但其可读性会有所提升。以下是详细步骤:

    步骤 1:文件配置

    将这些文件添加到存储库的根目录。

    setup.cfg — flake8 和 mypy 的配置。

    pyproject.toml — black 的配置。

    步骤 2:requirements

    用以下命令安装所需的库:

    步骤 3:black

    格式化代码的办法有 100500 多种。诸如 black 或 yapf 之类的格式化工具会按照一组预定义的规则来修正代码。

    阅读具有一定标准的代码库会愈加容易。当你破费几个小时编写代码并需求在不同的编码作风之间切换语境时,你的意志力会被消耗殆尽。因此,没有充沛的理由就不要这么做。

    运转以下命令将重新格式化一切的 python 文件以遵照 black 的规则。

    步骤 4:flake8

    运转以下命令不会修正代码,但会反省代码中的语法成绩并将其输入到屏幕上。然后修正这些成绩。

    步骤 5:mypy

    Python 没有强迫性的静态类型化,但还是建议将类型添加至函数参数并前往类型。例如:

    你应该在代码中添加键入内容。这会让代码读起来更容易。你可以运用 mypy 包反省参数和函数类型的分歧性。更新代码后,在整个存储库上运转 mypy:

    假设 mypy 出现成绩,修复它们。

    步骤 6:预提交钩子(hook)

    不断手动运转 flake8、black 和 mypy 会觉得厌倦。一个名为 pre-commit 的钩子可以处置这个成绩。要启用它,可以将以下文件复制到你的存储库中:https://github.com/ternaus/retinaface/blob/master/.pre-commit-config.yaml

    你需求运用以下命令安装 pre-commit 包。

    运用以下命令停止初始化:

    安装完成后,每次提交都会阅历一组反省。当提交中有错误时,反省不会允许提交经过。这和手动运转 black、flake8 以及 mypy 的不同之处在于,它不会哀求你修复成绩,而是强迫要求你做这件事。因此,这种办法不会糜费你的意志力、

    步骤 7:Github 操作

    你曾经向 pre-commit 钩子中添加了反省步骤,并在本地运转了这些步骤。但是你还需求第二道防线——让 GitHub 在每个拉取央求上运转这些反省步骤。

    你要做的就是将以下文件添加到存储库中:https://github.com/ternaus/retinaface/blob/master/.github/workflows/ci.yml

    执行以下代码来通知 GitHub 要反省什么:

    我还建议保持将代码直接推送到 master 分支的做法。你可以创立一个新的分支、修正代码、提交、放到 Github 上、创立 PR 央求,然后兼并到 master。这是一项行业标准,但是在学术研讨和 Kaggle 参赛者中却不常见。假设你对这些工具不熟习,能够需求花 20 分钟添加它们并修复错误和正告。

    记住这次的操作。在下个项目中,你可以在没写代码之前就在第一次提交中添加这些反省。从这个时分末尾,每次小的提交都会被反省,你每次最多只需求修复几行代码。这么做开支很小,也是一个良好的习气。

    花 20 分钟写一个优秀的 readme

    好的 readme 有两个作用:

    对你本人而言:能够你以为你永远都不会再用到这些代码了,但实践上并不一定。下次用的时分你能够也记不得它的详细内容了,但 readme 可以帮到你。

    对其别人而言:readme 是一个卖点。假设人们看不出该存储库的用途以及它所处置的成绩,大家就不会运用它,你所做的一切任务都不会对别人产生积极影响。

    一个机器学习库的最低要求是阐明以下成绩:

    用一张图来阐明义务是什么以及如何处置,而不需求任何文字。在花了几周处置成绩之后,你能够有 100500 张图,但你不能把他们放在 readme 里;

    数据放在哪里;

    怎样末尾训练;

    如何停止推理。

    假设你需求写 100500 个词来描画怎样运转训练或许推理,那就阐明你的项目存在成绩了。你需求重构代码,使它对用户愈加友好。

    人们常常会问:如何提高写代码的才能?这便是一个锻炼你的时机。你能够需求重写代码,尝试站在别人的角度看待你的 Readme。

    这是一个很好的锻炼时机,它可以让你学会从用户的角度看待成绩。

    花 20 分钟提高模型易用性

    我猜你会编写如下代码来加载预训练模型权重。

    用下面的代码从 retinaface.pre_trained_models 中引入 get_modelmodel = get_model("resnet50_2020-07-20", max_size=2048)。

    假设权重不在磁盘上,那就会从网络上先下载上去再缓存到磁盘上。初始化模型,并加载权重,这对用户来说是很友好的,也是你在 torchvision 和 timm 库中所看到的。

    步骤 1:托管预训练模型的权重

    这对我来说是最大的阻碍。假设不想运用 AWS、GCP,我要把模型的权重放在哪里?GitHub 上的 releases 是一个不错的选择。

    (责任编辑:admin)