0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用git管理數(shù)據(jù)科學(xué)試驗(yàn)的經(jīng)驗(yàn)

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-11-24 09:21 ? 次閱讀

編者按:機(jī)器學(xué)習(xí)科學(xué)家分享了使用git管理數(shù)據(jù)科學(xué)試驗(yàn)的經(jīng)驗(yàn)。

引言

版本控制是管理數(shù)據(jù)科學(xué)試驗(yàn)的關(guān)鍵工具。但是,魔鬼在細(xì)節(jié)之中。這篇文章將討論如何在數(shù)據(jù)科學(xué)項(xiàng)目中實(shí)現(xiàn)版本控制。

git的使用有好幾種范式,就數(shù)據(jù)科學(xué)試驗(yàn)而言,我基本上根據(jù)的是特性分支這一范式。簡單來說,特性分支意味著有一個(gè)master分支(主分支)作為基礎(chǔ),新特性通過在主分支上分支的方式加入代碼基,做出實(shí)現(xiàn)特性需要的所有改動(dòng)后,合并新分支至主分支。

策略

我為每個(gè)試驗(yàn)或者想要嘗試的新建模思路創(chuàng)建一個(gè)新分支。這時(shí)你需要有意識(shí)地決策:代碼的修改只適用于這次試驗(yàn),還是希望在這次試驗(yàn)和之前的試驗(yàn)上都適用?換一種表述方式:你是打算替換,還是增益?這個(gè)問題的答案將決定你是否可以把新分支合并回主分支。

我建議額外花一點(diǎn)功夫,將關(guān)鍵組件提取出來,作為一個(gè)庫,在多次試驗(yàn)中復(fù)用。這比有許多份相同(或者更糟,略有不同)的代碼要好很多,不用分別維護(hù),也不易導(dǎo)致錯(cuò)誤。俗話說得好,最好的代碼是沒有代碼。將關(guān)鍵組件提取至一個(gè)共享庫,你可以逐漸做出改進(jìn),并最終得到一個(gè)內(nèi)聚的代碼基,可以在一系列試驗(yàn)復(fù)用。相反,如果你不斷引入不向后兼容的改動(dòng),你會(huì)發(fā)現(xiàn)自己頻繁地在分支間跳轉(zhuǎn),以便復(fù)制/粘貼有用的代碼片段,接著卻需要加以修改,因?yàn)榻M件沒有設(shè)計(jì)成能夠一起工作的。在較大的試驗(yàn)中,這會(huì)變得很難操作。

特性分支這一方法的優(yōu)勢在于你可以將試驗(yàn)分支合并回主分支,接著運(yùn)行任何試驗(yàn)。這么做的代價(jià)是,當(dāng)你對核心庫進(jìn)行改動(dòng)時(shí),你也許需要同時(shí)修改其他試驗(yàn)的實(shí)現(xiàn)。所以,和所有事情一樣,這是一個(gè)需要做出權(quán)衡的決策。在我的經(jīng)驗(yàn)中,這個(gè)方法能夠自然地演化,我發(fā)現(xiàn),每當(dāng)我想要復(fù)制粘貼的時(shí)候,都會(huì)想一下能否提取公共代碼。

例子

推薦如下的目錄結(jié)構(gòu):

|-- 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目錄下。試驗(yàn)以目錄的形式組織,其中包含為試驗(yàn)執(zhí)行核心邏輯的代碼,以及相應(yīng)的輸入、輸出文件。實(shí)現(xiàn)代碼應(yīng)該極為簡單,只做具體試驗(yàn)特定的事情。例如,如果試驗(yàn)是要比較A方法和B方法,那么它會(huì)引入A和B的配置,從核心實(shí)例化相關(guān)代碼,并調(diào)用每個(gè)示例的run方法。

注意這個(gè)結(jié)構(gòu)很自然地提供了實(shí)現(xiàn)單元/功能/集成測試的地方。此外,單是提取通用組件至可復(fù)用的庫這一行動(dòng)就有助于使代碼更容易測試。由于代碼傾向于基于參數(shù),而非依賴硬編碼的試驗(yàn)細(xì)節(jié),為測試創(chuàng)建玩具樣本就要容易很多。以后我會(huì)寫一篇文章,深入討論如何為數(shù)據(jù)科學(xué)項(xiàng)目寫測試。

竅門

下面是一些我覺得在實(shí)踐中比較有用的簡單竅門。

.gitignore

.gitignore告訴git忽略哪些文件。在開始一個(gè)新項(xiàng)目時(shí),應(yīng)該優(yōu)先配置.gitignore。因?yàn)橐坏┠闾峤涣舜牢?,它就?huì)永遠(yuǎn)呆在代碼倉庫之中(除非你采取了一些特殊行動(dòng))。

最重要的是除外敏感信息,比如密碼和API密鑰。如果你早早地提交了包含敏感信息的文件,那么它很快就會(huì)變成一場噩夢。從當(dāng)前快照刪除文件無濟(jì)于事——你需要從所有之前的提交中清除敏感信息。對自己好一點(diǎn),避免去學(xué)如何做到這一點(diǎn)。

下一步是忽略非常大的數(shù)據(jù)文件和你不需要追蹤的不重要文件(例如,notebook檢查點(diǎn),IDE的配置文件,pycache,.pyc,等等)。在上面的例子中,所有輸入輸出文件也應(yīng)該忽略,因?yàn)樗鼈兺耆梢杂纱a本身確定,如果需要,可以重新生成。

頻繁提交

如果你完成了合理數(shù)量的工作,提交一次。不要吝嗇,頻繁提交也許能幫助你避免堵塞。

明晰的提交信息

如果你提交得足夠頻繁,那么你的工作大概也會(huì)相當(dāng)集中,這樣提交信息可以寫得更清晰?;厮莶幌胍母膭?dòng)時(shí),再?zèng)]有比根據(jù)恰當(dāng)注解的提交歷史快速找到目標(biāo)更令人滿足的了。如果你找到的描述是這樣的:“實(shí)現(xiàn)了3個(gè)新特性,增加了dropout,創(chuàng)建了交叉驗(yàn)證組件,同時(shí)重構(gòu)了訓(xùn)練邏輯”,那么你提交得不夠頻繁。

反饋

我在嘗試不同策略的過程中逐漸積累了這些想法。如果你有不同的做法,歡迎留言分享!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4694

    瀏覽量

    68075
  • 數(shù)據(jù)科學(xué)

    關(guān)注

    0

    文章

    164

    瀏覽量

    10033

原文標(biāo)題:如何使用git管理數(shù)據(jù)科學(xué)項(xiàng)目

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于單片機(jī)控制的滾動(dòng)試驗(yàn)臺(tái)電氣同步調(diào)速系統(tǒng)

    本帖最后由 luna 于 2011-3-8 12:29 編輯 機(jī)車車輛滾動(dòng)試驗(yàn)臺(tái)是對現(xiàn)代機(jī)車車輛進(jìn)行科學(xué)試驗(yàn)的大型試驗(yàn)裝置,它可以模擬再現(xiàn)機(jī)車車輛在鐵路線上運(yùn)行的各種工況環(huán)境,測試
    發(fā)表于 03-08 12:05

    在RT-Thread studio上使用GIT進(jìn)行工程管理

    1、如何在RT-Thread studio上使用GIT進(jìn)行工程管理  Git 是目前最先進(jìn)的分布式版本控制系統(tǒng)。什么是版本控制系統(tǒng)?  形象地講,版本控制就是按照縱向或橫向的維度記錄當(dāng)前工程下的變更
    發(fā)表于 09-19 17:05

    使用Git版本控制軟件管理源代碼

    Git 是 Linux Torvalds 為了幫助管理 Linux? 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。我們可以自己下載這個(gè)軟件用于對內(nèi)核的 hack 分析,或者用來管理自己的軟件開發(fā)項(xiàng)目
    發(fā)表于 05-16 11:30 ?2098次閱讀

    Pro_Git中文版

    代碼版本管理軟件GIT的詳細(xì)使用教程,GIT上手比較慢,不看資料很難上手
    發(fā)表于 07-20 17:21 ?0次下載

    Airbnb機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)團(tuán)隊(duì)經(jīng)驗(yàn)分享

    Airbnb資深機(jī)器學(xué)習(xí)科學(xué)家Shijing Yao、前Airbnb數(shù)據(jù)科學(xué)負(fù)責(zé)人Qiang Zhu、Airbnb機(jī)器學(xué)習(xí)工程師Phillippe Siclait分享了在Airbnb產(chǎn)品上大規(guī)模應(yīng)用深度學(xué)習(xí)技術(shù)的
    的頭像 發(fā)表于 07-07 09:24 ?3804次閱讀

    汽車試驗(yàn)數(shù)據(jù)管理系統(tǒng)(TDM系統(tǒng))

    ,不但增加研發(fā)成本,而且還由于數(shù)據(jù)丟失影響開發(fā)進(jìn)度。因此,如何有效的管理試驗(yàn)數(shù)據(jù)就成為企業(yè)重要的工作。 由于各企業(yè)的研發(fā)流程不同,試驗(yàn)
    發(fā)表于 04-10 09:13 ?3311次閱讀

    Git命令的講解和Git數(shù)據(jù)通信原理的資料概述

    Git是一款開源的分布式版本控制系統(tǒng)(VCS),常用的VCS工具還包括SVN、Mercurial等,他們的使命是對資源變化的進(jìn)行版本管理控制,對資源容災(zāi)備份,支持多域協(xié)同開發(fā)。這里的資源不僅僅是系統(tǒng)
    發(fā)表于 06-11 08:00 ?7次下載
    <b class='flag-5'>Git</b>命令的講解和<b class='flag-5'>Git</b><b class='flag-5'>數(shù)據(jù)</b>通信原理的資料概述

    Git進(jìn)行Vivado工程管理的教程分享

    作者:貓叔 git有多好用我就不用多說了,可謂是程序員必備技能之一。對于一般的軟件代碼來說,只需把源文件進(jìn)行git管理即可。但對于FPGA工程師來說,使用git多多少少有些蛋疼,主要有
    的頭像 發(fā)表于 11-16 14:59 ?3012次閱讀
    <b class='flag-5'>Git</b>進(jìn)行Vivado工程<b class='flag-5'>管理</b>的教程分享

    數(shù)據(jù)科學(xué)導(dǎo)論的課程設(shè)計(jì)及改革綜述

    和中國人民大學(xué)等高校開設(shè)的具有一定代表性的數(shù)據(jù)科學(xué)導(dǎo)論課程的基礎(chǔ)上,作者結(jié)合自己開設(shè)的數(shù)據(jù)科學(xué)導(dǎo)論課程以及國家冋名精品在線開放課程建設(shè)的經(jīng)驗(yàn)
    發(fā)表于 05-18 11:32 ?2次下載

    Git權(quán)威指南

    Git管理資料,方便大家學(xué)習(xí)git知識(shí)
    發(fā)表于 06-29 14:15 ?0次下載

    利用Learn Git Branching輕松學(xué)習(xí)Git

    Git作為世界上最流行的版本控制系統(tǒng),可以說是每一位與程序打交道的朋友最值得學(xué)習(xí)的軟件之一。除了管理自己的項(xiàng)目,如果你對參與開源項(xiàng)目感興趣,那么Git更是聯(lián)結(jié)Github、Gitlab等知名代碼項(xiàng)目
    的頭像 發(fā)表于 09-15 14:53 ?1476次閱讀

    Git的分支管理

    在項(xiàng)目的開發(fā)過程中,很多時(shí)候都會(huì)使用Git托管工具進(jìn)行項(xiàng)目文件或者代碼的管理,方便團(tuán)隊(duì)成員之間的協(xié)作開發(fā)。使用Git進(jìn)行項(xiàng)目管理目前也是越來越受到歡迎,除了
    的頭像 發(fā)表于 02-20 14:49 ?955次閱讀
    <b class='flag-5'>Git</b>的分支<b class='flag-5'>管理</b>

    Git是什么 Git介紹

    git 是什么? Git 誕生于 2005 年,是一款免費(fèi)、開源、分布式版本控制系統(tǒng)。 直接記錄快照,而非差異比較 Git 和其它版本控制系統(tǒng)的主要差別在于 Git 對待
    的頭像 發(fā)表于 07-22 10:50 ?1696次閱讀
    <b class='flag-5'>Git</b>是什么 <b class='flag-5'>Git</b>介紹

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

    版本管理有許多不同的方式,其中開源的Git比較受歡迎,分布式相比于集中式的最大區(qū)別在于開發(fā)者可以提交到本地,每個(gè)開發(fā)者通過克?。?b class='flag-5'>git clone),在本地機(jī)器上拷貝一個(gè)完整的Git
    的頭像 發(fā)表于 08-14 14:34 ?630次閱讀
    <b class='flag-5'>Git</b>版本<b class='flag-5'>管理</b>工具的使用方法

    藍(lán)牙 | 軟件:Git管理高通的ChipCode項(xiàng)目

    處理卡住了,我們只能從git下手。Git有優(yōu)秀的項(xiàng)目管理,代碼管理的能力,所以學(xué)一學(xué)git管理
    的頭像 發(fā)表于 01-26 08:29 ?329次閱讀
    藍(lán)牙 | 軟件:<b class='flag-5'>Git</b><b class='flag-5'>管理</b>高通的ChipCode項(xiàng)目