机器学习从理论到工程的第二步-开发环境与工具篇
在《第一步-編程語言篇》中,小夕為大家較為詳細的介紹了做機器學習(及其相關應用方向)的編程語言的選擇問題,這一篇便是小夕為大家推薦的各個編程語言的開發環境/工具。
習慣性掃盲開篇。鑒于可能有部分同學的軟件開發經驗稍有欠缺,因此首先講講基本概念。
?
代碼編輯器:
代碼編輯器就是寫代碼的地方啦,其實任何文本編輯器都可以作為代碼編輯器,畢竟源代碼是寫成純文本的形式的。
?
但是效果往往就是像上圖一樣簡陋而低效。由于寫代碼涉及到代碼自動補全、語法關鍵字高亮、智能縮進等高效排版和代碼檢查的需求,因此像windows下自帶的文本文檔這種編輯器是不適合直接拿來用的。
?
除了上面這類眾所周知的圖形化模式下的系統自帶的文本編輯器,還有命令行模式下的編輯器,比如眾所周知的vim編輯器。
?
對于資深程序員/喵來說,vim完全可以被DIY成寫代碼神器,但是對于初學者,小夕強烈不建議基于這類編輯器去DIY,很費時費力,而且除了可以裝X以外,對機器學習算法和工程的研發幾乎沒有實質性的幫助。而且實踐證明,哪怕DIY的一身神裝,還是不如下面小夕會推薦的代碼編輯器強大。
?
一般意義上的代碼編輯器的話,大家也應該比較熟悉啦。比如各種IDE中內嵌的,比如上個世紀的產物VC6.0、windows下的VS、mac下的xcode、跨平臺的Eclipse、Qt等IDE中內嵌的文本編輯器也是非常強大的,除此之外,Sublime等非IDE內嵌的代碼編輯器也是各具特色,在性能上甚至遠超過IDE內嵌的編輯器。
??
編譯器:
很多初學者認為,他們在用的VC6.0,VS就是編譯器,這就比較尷尬了。其實編譯器的功能很直接,就是將上面用純文本寫成的源代碼按照它會的編程語言的語法規則編譯成可執行文件。
生成的可執行文件可以運行在你的操作系統里,比如windows下的exe文件,也可以運行在某語言的虛擬機里,比如運行在Java虛擬機JRE下的class文件。
?
比如我們寫了這么一段(C語言)源代碼。文件名叫hello.c。
??
然后我們僅僅是調用編譯器編譯它一下。(在命令行里直接調用C語言的經典編譯器——GCC。如下圖:
?
?
即,調用gcc編譯器,編譯hello.c,目標文件名叫“hello”。
?
然后編譯完成,我們通過這個命令看一下文件夾下的文件及其權限等信息:
?
發現文件夾下生成了hello這個文件,順便看一下文件權限(第一列)。
?
?
發現生成的hello的文件權限里有x,而x就代表著可執行。運行一下,就可以看到printf出的信息啦:
就醬,這就是編譯器的使命。
?
調試器:
但是,實際開發過程中,經常有編譯錯誤或者運行時的錯誤,因此我們需要通過打斷點(break point)來暫停程序運行,實時查看運行時代碼中變量的值等,來幫助我們調試代碼,找到錯誤。
?
初學者完成這個過程往往是在vc6.0、VS等IDE中,以為這是IDE的專利。實際上這個也是跟編譯器一樣,是可以獨立運行的一個程序。有興趣的同學可以在命令行試一下用GDB來調試代碼,小夕就不演示啦。
?
集成開發環境:
集成開發環境(IDE)就是集成了一系列開發工具的環境,比如上面的文本編輯器、xx語言編譯器、調試器等,往往還會包含開發環境(environments)管理、項目管理(projects)等功能。誒?那么開發環境和項目管理有什么區別和意義呢?
?
開發環境:
其實,開發環境就可以看成一個虛擬機!凡是在這個虛擬機里進行研發的項目,都可以自由使用這個虛擬機里的資源。這里的資源就是指各種庫/包。誒誒?弄這么一個虛擬機有什么用呢?我從來沒有感受過它的存在呀~
?
所以說呀,在埋頭苦推數學公式的時候,不要忘了編程經驗的積累哦~想象一下,平常你都是用最新版TensorFlow(比如1.x版本)+最新版python(比如3.x版本)去驗證你剛開腦洞想出的算法,然后有一天,你突然發現這個算法別人已經實現過了,掛在了github上。然后呢,你就想直接跑人家寫好的代碼看計算結果。
?
但是,不幸的是,他的代碼是用舊版TensorFlow實現的,比如0.5.0的版本!python也是舊版的python2!而你電腦上一直用的是1.x的版本tf和3.x版本的python!而舊版跟新版的API風格差別很大,移植會特別費時間!那怎么辦呢?把自己電腦上的TensorFlow和python卸掉嗎?
?
當然這時就是開發環境發揮作用的時候啦~我們只需要新建一個開發環境(虛擬機),在這個虛擬機里,下載好舊版tensorflow等,這樣既能進入到這個虛擬機里直接跑人家的代碼,又可以關掉這個虛擬機,返回到你默認的環境里,去繼續用你的最新版python和TensorFlow啦~
項目管理(project):?
項目管理,其實就跟操作系統里的文件系統是一樣的原理。
我們在做機器學習項目時,往往有不同源的數據集,因此需要一個Dataset文件夾里面放著各種數據集;然后需要由我們項目的核心代碼,因此需要一個Source文件夾;然后有時用到一些冷門的第三方庫,為了避免與我們的代碼混淆,于是將它們放到Library文件夾;然后訓練模型的過程中,比如訓練一個深度神經網絡,那么我們需要隔一段時間保存一下模型的訓練結果呀,所以又需要額外的文件夾保存模型的參數日志等~更不用說測試的過程啦。
所以,將上面這些瑣碎的目錄納入到一個框架下,那就是project了。至此有沒有懂project和environment的區別呢?所以,我們同一個project完全可以放到不同的environment里去運行,只要這個environment有這個project所需要的資源(版本符合要求的庫);而一個environment也當然可以用在多個project啦。
腳本語言與解釋器:
還有一些現代編程語言,不需要被編譯器編譯成可執行文件后才能運行,這一類語言被稱為腳本語言,比如python、matlab。
?
不需要編譯就能直接運行有什么好處呢?那就是可以用一個稱為“解釋器”的程序來實時的解釋你敲入的每一句話,比如在python解釋器中,
?
單純的解釋器好像看起來并沒什么卵用,只能當做玩具寫寫hello Xi Xiaoyao這種代碼。但是在后面的講解中,小夕將給大家看到它的強大應用——單元測試。
好啦,概念掃盲完成了~下面就開始正文了——工具推薦!
?
誒誒?快2000字了?那還是敬請期待《機器學習從理論到工程的第二步——開發環境與工具(下)》啦( ̄? ̄)
總結
以上是生活随笔為你收集整理的机器学习从理论到工程的第二步-开发环境与工具篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java多线程系列(二):线程的五大状态
- 下一篇: 阿里P8架构师谈:JVM的内存分配、运行