0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用git管理数据科学试验的经验

zhKF_jqr_AI 来源:未知 作者:李倩 2018-11-24 09:21 次阅读

编者按:机器学习科学家分享了使用git管理数据科学试验的经验。

引言

版本控制是管理数据科学试验的关键工具。但是,魔鬼在细节之中。这篇文章将讨论如何在数据科学项目中实现版本控制。

git的使用有好几种范式,就数据科学试验而言,我基本上根据的是特性分支这一范式。简单来说,特性分支意味着有一个master分支(主分支)作为基础,新特性通过在主分支上分支的方式加入代码基,做出实现特性需要的所有改动后,合并新分支至主分支。

策略

我为每个试验或者想要尝试的新建模思路创建一个新分支。这时你需要有意识地决策:代码的修改只适用于这次试验,还是希望在这次试验和之前的试验上都适用?换一种表述方式:你是打算替换,还是增益?这个问题的答案将决定你是否可以把新分支合并回主分支。

我建议额外花一点功夫,将关键组件提取出来,作为一个库,在多次试验中复用。这比有许多份相同(或者更糟,略有不同)的代码要好很多,不用分别维护,也不易导致错误。俗话说得好,最好的代码是没有代码。将关键组件提取至一个共享库,你可以逐渐做出改进,并最终得到一个内聚的代码基,可以在一系列试验复用。相反,如果你不断引入不向后兼容的改动,你会发现自己频繁地在分支间跳转,以便复制/粘贴有用的代码片段,接着却需要加以修改,因为组件没有设计成能够一起工作的。在较大的试验中,这会变得很难操作。

特性分支这一方法的优势在于你可以将试验分支合并回主分支,接着运行任何试验。这么做的代价是,当你对核心库进行改动时,你也许需要同时修改其他试验的实现。所以,和所有事情一样,这是一个需要做出权衡的决策。在我的经验中,这个方法能够自然地演化,我发现,每当我想要复制粘贴的时候,都会想一下能否提取公共代码。

例子

推荐如下的目录结构:

|-- core/

|-- tests/

|-- test_pull_data.py

|-- test_prepare_data.py

|-- test_model.py

|-- test_deploy.py

|-- test_utils.py

|-- pull_data.py

|-- prepare_data.py

|-- model.py

|-- deploy.py

|-- utils.py

|-- experiment_1/

|-- data/

|-- training.csv

|-- validation.csv

|-- test.csv

|-- output/

|-- results.json

|-- models/

|-- model1

|-- model2

|-- job_config.py

|-- build_data.py

|-- train.py

|-- evaluate.py

|-- prod.py

|-- experiment_2/

|-- data/

|-- training.csv

|-- validation.csv

|-- test.csv

|-- output/

|-- results.json

|-- models/

|-- model1

|-- model2

|-- job_config.py

|-- build_data.py

|-- train.py

|-- evaluate.py

|-- prod.py

在这一情形中,主要逻辑位于core目录下。试验以目录的形式组织,其中包含为试验执行核心逻辑的代码,以及相应的输入、输出文件。实现代码应该极为简单,只做具体试验特定的事情。例如,如果试验是要比较A方法和B方法,那么它会引入A和B的配置,从核心实例化相关代码,并调用每个示例的run方法。

注意这个结构很自然地提供了实现单元/功能/集成测试的地方。此外,单是提取通用组件至可复用的库这一行动就有助于使代码更容易测试。由于代码倾向于基于参数,而非依赖硬编码的试验细节,为测试创建玩具样本就要容易很多。以后我会写一篇文章,深入讨论如何为数据科学项目写测试。

窍门

下面是一些我觉得在实践中比较有用的简单窍门。

.gitignore

.gitignore告诉git忽略哪些文件。在开始一个新项目时,应该优先配置.gitignore。因为一旦你提交了蠢物,它就会永远呆在代码仓库之中(除非你采取了一些特殊行动)。

最重要的是除外敏感信息,比如密码和API密钥。如果你早早地提交了包含敏感信息的文件,那么它很快就会变成一场噩梦。从当前快照删除文件无济于事——你需要从所有之前的提交中清除敏感信息。对自己好一点,避免去学如何做到这一点。

下一步是忽略非常大的数据文件和你不需要追踪的不重要文件(例如,notebook检查点,IDE的配置文件,pycache,.pyc,等等)。在上面的例子中,所有输入输出文件也应该忽略,因为它们完全可以由代码本身确定,如果需要,可以重新生成。

频繁提交

如果你完成了合理数量的工作,提交一次。不要吝啬,频繁提交也许能帮助你避免堵塞。

明晰的提交信息

如果你提交得足够频繁,那么你的工作大概也会相当集中,这样提交信息可以写得更清晰。回溯不想要的改动时,再没有比根据恰当注解的提交历史快速找到目标更令人满足的了。如果你找到的描述是这样的:“实现了3个新特性,增加了dropout,创建了交叉验证组件,同时重构了训练逻辑”,那么你提交得不够频繁。

反馈

我在尝试不同策略的过程中逐渐积累了这些想法。如果你有不同的做法,欢迎留言分享!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4798

    浏览量

    68714
  • 数据科学
    +关注

    关注

    0

    文章

    165

    浏览量

    10076

原文标题:如何使用git管理数据科学项目

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于单片机控制的滚动试验台电气同步调速系统

    本帖最后由 luna 于 2011-3-8 12:29 编辑 机车车辆滚动试验台是对现代机车车辆进行科学试验的大型试验装置,它可以模拟再现机车车辆在铁路线上运行的各种工况环境,测试
    发表于 03-08 12:05

    在RT-Thread studio上使用GIT进行工程管理

    1、如何在RT-Thread studio上使用GIT进行工程管理  Git 是目前最先进的分布式版本控制系统。什么是版本控制系统?  形象地讲,版本控制就是按照纵向或横向的维度记录当前工程下的变更
    发表于 09-19 17:05

    使用Git版本控制软件管理源代码

    Git 是 Linux Torvalds 为了帮助管理 Linux® 内核开发而开发的一个开放源码的版本控制软件。我们可以自己下载这个软件用于对内核的 hack 分析,或者用来管理自己的软件开发项目
    发表于 05-16 11:30 2146次阅读

    Pro_Git中文版

    代码版本管理软件GIT的详细使用教程,GIT上手比较慢,不看资料很难上手
    发表于 07-20 17:21 0次下载

    Airbnb机器学习和数据科学团队经验分享

    Airbnb资深机器学习科学家Shijing Yao、前Airbnb数据科学负责人Qiang Zhu、Airbnb机器学习工程师Phillippe Siclait分享了在Airbnb产品上大规模应用深度学习技术的
    的头像 发表于 07-07 09:24 3879次阅读

    汽车试验数据管理系统(TDM系统)

    ,不但增加研发成本,而且还由于数据丢失影响开发进度。因此,如何有效的管理试验数据就成为企业重要的工作。 由于各企业的研发流程不同,试验
    发表于 04-10 09:13 3508次阅读

    Git命令的讲解和Git数据通信原理的资料概述

    Git是一款开源的分布式版本控制系统(VCS),常用的VCS工具还包括SVN、Mercurial等,他们的使命是对资源变化的进行版本管理控制,对资源容灾备份,支持多域协同开发。这里的资源不仅仅是系统
    发表于 06-11 08:00 7次下载
    <b class='flag-5'>Git</b>命令的讲解和<b class='flag-5'>Git</b><b class='flag-5'>数据</b>通信原理的资料概述

    Git进行Vivado工程管理的教程分享

    作者:猫叔 git有多好用我就不用多说了,可谓是程序员必备技能之一。对于一般的软件代码来说,只需把源文件进行git管理即可。但对于FPGA工程师来说,使用git多多少少有些蛋疼,主要有
    的头像 发表于 11-16 14:59 3106次阅读
    <b class='flag-5'>Git</b>进行Vivado工程<b class='flag-5'>管理</b>的教程分享

    数据科学导论的课程设计及改革综述

    和中国人民大学等高校开设的具有一定代表性的数据科学导论课程的基础上,作者结合自己开设的数据科学导论课程以及国家冋名精品在线开放课程建设的经验
    发表于 05-18 11:32 2次下载

    Git权威指南

    Git管理资料,方便大家学习git知识
    发表于 06-29 14:15 0次下载

    利用Learn Git Branching轻松学习Git

    Git作为世界上最流行的版本控制系统,可以说是每一位与程序打交道的朋友最值得学习的软件之一。除了管理自己的项目,如果你对参与开源项目感兴趣,那么Git更是联结Github、Gitlab等知名代码项目
    的头像 发表于 09-15 14:53 1594次阅读

    Git的分支管理

    在项目的开发过程中,很多时候都会使用Git托管工具进行项目文件或者代码的管理,方便团队成员之间的协作开发。使用Git进行项目管理目前也是越来越受到欢迎,除了
    的头像 发表于 02-20 14:49 1052次阅读
    <b class='flag-5'>Git</b>的分支<b class='flag-5'>管理</b>

    Git是什么 Git介绍

    git 是什么? Git 诞生于 2005 年,是一款免费、开源、分布式版本控制系统。 直接记录快照,而非差异比较 Git 和其它版本控制系统的主要差别在于 Git 对待
    的头像 发表于 07-22 10:50 1804次阅读
    <b class='flag-5'>Git</b>是什么 <b class='flag-5'>Git</b>介绍

    Git版本管理工具的使用方法

    版本管理有许多不同的方式,其中开源的Git比较受欢迎,分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git
    的头像 发表于 08-14 14:34 705次阅读
    <b class='flag-5'>Git</b>版本<b class='flag-5'>管理</b>工具的使用方法

    蓝牙 | 软件:Git管理高通的ChipCode项目

    处理卡住了,我们只能从git下手。Git有优秀的项目管理,代码管理的能力,所以学一学git管理
    的头像 发表于 01-26 08:29 414次阅读
    蓝牙 | 软件:<b class='flag-5'>Git</b><b class='flag-5'>管理</b>高通的ChipCode项目