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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  这个临时“战情室”相当简陋,为了尽快开展工作,Google 工程师们直接将门架起来当作桌子办公了。当....

  让很多程序员后悔到想剁手的“rm -rf”绝对要算一个,糟糕的不是命令行本身,而是它带来的后果。此前....

  我主要遇到了这样一个问题,启动代码和Bootloader的区别以及它们在ARM上运行操作系统和不运行....

  根据国务院《新一代人工智能发展规划的通知》,可以想见人工智能教育往低幼渗透的例子只会越来越多。小学生....

  对于设计和集成智能视频分析(IVA)端应用程序(如停车管理、安全基础设施、零售分析、物流管理和访问控....

  该恶意代码共感染了50余个软件,恶意软件操作员利用中国社交网豆瓣进行C&C通信。该恶意软件还追踪了受....

  他介绍了 CCF 大数据专家委员会对 2019 年大数据发展的十大预测,并从学科、技术、系统、应用等....

  代码漏洞的检验挑战在于,要知道哪些地方可能会成为攻击者的目标,源代码和编译后的产品并不是一一对应的关....

  如果代码或者数据的容量已经超出了RAM区域能调整的范围,那就不能将代码和数据的运行域都放在RAM中了....

  然而,模版编程还存在一些问题,比如有些模版的代码写起来比较困难,读起来比较难懂,尤其是编译出错的时候....

  一旦开始获取数据,非常重要的一点是及早查看数据,以便尽早找出可能存在的问题。例如,爬取程序可能漏掉了....

  本文档的主要内容详细介绍的是高精密电阻丝印代码和阻值表的详细资料免费下载。

  说到代码的重构对于国外的程序员提到的比较多,特别是大型的开源工程,基本上一个模块或者函数的实现会反复....

  CMD命令速查手册 cmd命令大全 cmd命令详解如果你想了解本页面是怎么来的 请下载批处理代码 到....

  我们可以创造一个从UFM就地执行的Nios II应用,并使用Nios II软件构建工具中的调试工具调....

  《代码整洁之道》是2010年1月由人民邮电出版社出版的图书,作者是马丁。本书主要讲述了代码质量与其整....

  从这篇论文的内容来看,作者提出了一个简单有效的模块,名为“干扰层”(perturbation lay....

  了解如何使用Xilinx SDK调试u-boot代码。 概述了技术以获得重定位偏移量,以便可以在S....

  Neo4j 是非常流行的图 数据库,在11月初刚刚宣布完成 E 轮 8000 万美元融资。此次调整,....

  模型过拟合意味着我们把模型“训练得太好了”,通过一遍又一遍的训练,它已经把训练数据的特征都“死记硬背....

  了解如何使用Xilinx软件开发套件(XSDK)中的应用程序模板创建简单的应用程序。 本视频将引导....

  用于异构计算的OpenCL标准定义了用于在主机处理器和加速设备之间传输数据的编程模型。 此视频介绍....

  有时我们需要对比不同情形下的各类报告,以侦测这些“不同”对设计的影响。所谓的“不同情形”通常有以下几....

  分号Tip不要在行尾加分号, 也不要用分号将两条命令放在同一行。 行长度Tip每行不超过80个字符

  本文将通过介绍一个代码模板的四个基本步骤,来帮助您完成数据分析的初期探索。

  过了一段时间你回头看代码的时候,或者同事看你的代码的时候,看到speak(x)这行会觉得x太含糊。于....

  本文档的主要内容详细介绍的是51单片机C语言程序设计教程书中代码及课后作业资料免费下载。

  了解如何获取Xilinx Linux内核源代码,配置它,构建内核和设备树,最后在ZC702板上运行新....

  本文档的主要内容详细介绍的是315M无线蓝牙解码代码的详细资料免费下载 本作品使用的例程中包含RCS....

  concat的参数可以是任意多个列表,从而实现列表的拼接。如图3所示,利用concat命令将图1的列....

  本视频将为您提供Model Composer的高级概述,这是一种来自Xilinx的基于模型的新设计工....

  AngelList提供的是列出数据科学家岗位的公司数而不是岗位数。我把AngelList从所有分析里....

  它们只是Kaggle的Jupyter笔记本版本,反过来,它只是一种非常有效和酷炫的共享代码方式,以及....

  本文档的主要内容详细介绍的是linux的History命令代码的详细资料合集免费下载。

  本文档的主要内容详细介绍的是使用单片机设计的智能计算器资料合集免费下载,有实物截图,有源代码,有仿真....

  在一个录音工程中,对声音的拾取并不是唯一重要的一部分-通常除此之外还有很多方面需要考虑。为了达到最好....

  方向是自然语言处理的同学们有福啦,为了跟踪自然语言处理(NLP)的进展,有大量仁人志士在 Githu....

  先说说分析(Analysis)吧,它是从微积分(Caculus)发展起来的——这也是有些微积分教材名....

  我喜欢当背包客和攀岩。如果你早晨也去旧金山的Mission Cliffs室内攀岩馆攀岩,下次见面时我....

  这就是究极形态了,我们添加了第四行的代码,来看&_min1,它的意思是取_min1的地址,而&_mi....

  本文档的主要内容详细介绍的是山外官方K60开发板参考代码合集V5.3(支持FX、FN和DNZ)

  PyCharm包括很多工具,集成的调试器和测试运行器,性能调试工具,内置终端,集成主要版本控制系统(....

  在过去的七年半中,我在Ronimo游戏公司指导过十几个程序员实习生,审阅了数百份简历。我发现他们中的....

  如你所见,它返回一个列表,每个数字预测训练集中每个记录的武器。我们之所以看到的是数字而不是武器名称,....

  您好,您可以通过主程序访问配置位吗?主要是代码保护配置位。 以上来自于百度翻译 以下为原...

  嗨, 我们注意到Run命令能够以Move命令运行更慢的速度,即使是最小的Minspeed也是如此。 这是正确/正常还是我们有代...

  嗨,我在电机控制库中缺少MCLibrary_src的文件。我在构建代码时发现错误。我有错误的照片。请看,请帮助我。 谢谢 以上...

  概述 PolySpace 是 MathWorks 公司产品,主要用于分析软件运行时错误工具。它包括...

  我遇到过这样一个问题。我可以通过我同事的XC 16 1.32传递我的代码,但是我不能超过1.33,错误是从编译器里面出来的。我需要X...

  比如realsenseviewer,我想用pyrealsense2来控制深度曝光水平。 所以我正在寻找一个解释,但我还没有发现任何相关的东西。 谁可...

  HI团队我使用S29 ALL 016J为我的项目,我有问题下载代码到它,我已经创建了一个闪存ALGO,但每当它给一个闪光灯超时错...

  我们最近将所有程序从Vee5升级到Vee9。 在每个实例中,在V5中执行完美的程序现在会在V9中崩溃,我们有“EXECUTE CL...

或许你会感兴趣的文章——

& Theme by Washun www.9992019.com,www.3992019.com,www.1992019.com,www.2992019.com,www.yh996099.com,www.yh997099.com网站地图 [登录]