度過了理論期,終於快要進入實作篇。但要用 deep learning framework 實作一個 network 之前,一些基本的工程技能要有。
本篇介紹一些必備的實作工具,才不會不知道在哪裡寫 code、跑出垃圾不知道怎麼 debug。
Python 可以說是 deep learning 界最熱門的選擇。因為在 train network 的時候,code 本身的效率遠遠不及實際 training 所花的時間,所以選用 Python 雖然效能差但較為易懂的語法非常適合。很多的 deep learning framework,包括我們之後要用的 PyTorch,也都有 Python 的支援。
網路上學習 Python 的資源非常多,有其他程式語言背景的肯定找個 tutorial 讀讀就能看懂。第一次學習的建議先去找完整的線上課程上課!
就不提供連結了,Google 真的不要太多資源。
此外,我們會使用 Python 3 而非 Python 2,兩者差距頗大,請先確認 Python 3 有被安裝。可以打開 terminal 輸入 python --version
確定是 3.x
版本,如果是 2.x
可以試試看 python3 --version
,如果找不到 python3
指令請去下載 Python 3。
Numpy 是 Python 一個處理高維度 data 的 library,基本上不會 numpy 在 ML 界活不下去。之後要用 PyTorch 建 network 處理 data 的時候也很需要 Numpy。不過不需要熟悉太多 function,重點是理解他怎麼把高維 data 包好,array 跟 array 相乘的時候 dimension 會怎麼互相影響。
Google 不到好文的話,這邊有個超棒的英文教學:Python Numpy Tutorial (Python + Numpy 教學,連 Python 都包了)
文中提到的指令會是 Linux commands,也就是打開 terminal(終端機)用來執行程式輸入的指令。基本上 MacOS 和 Linux 的 terminal 都可以使用。
Windows 的使用者如果知道自己在做什麼,也可以用 Windows 自己的 command,不過還是極力推薦大家安裝 Windows Terminal、Windows Subsystem for Linux、 或是 Git Bash,提供了類似 Linux/Unix 的環境,可以跑 Linux commands。
此外還有個選項是裝 Linux 雙系統。
還是再說一次,作為開發者絕對推薦使用 Linux commands,網路上的資源都是使用他,Windows 也慢慢推出可以跑 Linux commands 的環境,已經沒什麼顧慮了。
這邊有官方教學,也可以邊碰邊查邊學,指令很多只需要認識基本的就行!
寫 code 跑程式,大家肯定有自己的一套。選擇很多,如果走一般路線那就是 editor 寫 code + terminal 跑程式和操作其他例如環境建置、版本控制等等工具。
如果新手想要有介面,或想要即時視覺化資料的,也可以用 Jupyter Notebook。他可以把程式碼、視覺化結果都整合在一個檔案裡,相當方便。缺點就是 project 一大,總沒辦法所有東西都塞在一個檔案裡,分散在不同檔案就變得很難管理架構。
—— Jupyter Notebook 介面。
還有個選擇是 IDE(整合開發環境),例如 Visual Studio、PyCharm 等等。他整合了很多東西,editor、terminal、環境配置、debugger、版本控制等等,但個人覺得比較適合大型 project,不太推薦用來寫 deep learning 小 project。一來他很慢,寫一個小 model 就要等個好幾分鐘只為了等他處理好他的事情。二來功能太多,找個 environment variable 在哪裡設都找不到。不過如果你習慣用 IDE,那當然也不反對。
在一部電腦上,常常會有很多不同 project,每個 project 都會用到一些 library,各自需要的 library 可能還是不同版本。這時候如果一個 library 都設在同個地方,不同 project 的環境就會開始打架。
所以建置 virtual environment 是一個好習慣。他會為每個 project 設置自己獨立的環境,盡情安裝各自需要的 library 版本。
Anaconda 是最常見的適用於 machine learning project 的環境管理工具,還會先幫你裝好常用的幾個 library。基本上沒其他更好的選擇啦!
第一次使用的朋友要稍微熟悉一下基本 command,官方有完整教學,也可以自己 Google 比較簡易的教學。主要會用到的 command 可以參照這個 cheatsheet。
雖然不是必須,但想成為好的工程師,不能不會版本控制啊!版本控制就是,你的 code 修修改改會有很多個版本,但偶爾也想回到前個版本,所以不能只留最新的。為了避免出現一堆 old
、new
、final
在檔案名字裡,你應該要學一下 Git。
Git 會幫你記好所有檔案的歷史,方便你回溯到前一個版本,也可以和其他人協作同一份 code 而不會打架。GitHub 則是用 Git 操作的 code 管理平台,通常用來和 teammate 合作,也可以當作備份 code 甚至展示 project 的地方。
總之學 Git 真的好處多多,不如趁現在早早學會,還能用在很多地方呢。不過新手要小心的是 Git 指令很多,一個操作不慎甚至整份 code 會全毀⋯⋯
Git 的教學很多,但這邊有一份自己之前寫的教學文,現在回去看還滿佩服自己的,寫得這麼詳盡。
建好 Neural Network 要開始訓練的時候,自己的電腦常常資源不足跑不動,或者是跑得動但跑下去其他事都不用做了。很多雲端服務都有專門為 Deep Learning 建置的環境,如果預估耗時長的訓練,可以開一個 instance 把 code 放上去跑。
雲端服務三巨頭:
很多都有免費額度可以利用。
跟雲端服務溝通也需要熟悉一些工具,包括 ssh 遠端連線操作 和 tmux session 管理工具,建議查一下資料。這邊也有一份 VM Practical Tips 可以參考。