--- tags: Knock Knock! Deep Learning --- Day 4 / 必備實作知識與工具 / Coding 前你必須認識的工具 === 度過了理論期,終於快要進入實作篇。但要用 deep learning framework 實作一個 network 之前,一些基本的工程技能要有。 本篇介紹一些必備的實作工具,才不會不知道在哪裡寫 code、跑出垃圾不知道怎麼 debug。 ## 語言 - Python  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](https://www.python.org/downloads/)。 ## Library - Numpy  [Numpy](https://numpy.org/) 是 Python 一個處理高維度 data 的 library,基本上不會 numpy 在 ML 界活不下去。之後要用 PyTorch 建 network 處理 data 的時候也很需要 Numpy。不過不需要熟悉太多 function,重點是理解他怎麼把高維 data 包好,array 跟 array 相乘的時候 dimension 會怎麼互相影響。 Google 不到好文的話,這邊有個超棒的英文教學:[Python Numpy Tutorial](https://cs231n.github.io/python-numpy-tutorial/) (Python + Numpy 教學,連 Python 都包了) ## 執行程式 - Linux Commands  文中提到的指令會是 Linux commands,也就是打開 terminal(終端機)用來執行程式輸入的指令。基本上 MacOS 和 Linux 的 terminal 都可以使用。 Windows 的使用者如果知道自己在做什麼,也可以用 Windows 自己的 command,不過還是極力推薦大家安裝 [Windows Terminal](https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701?rtc=1&activetab=pivot:overviewtab)、[Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10)、 或是 [Git Bash](https://gitforwindows.org/),提供了類似 Linux/Unix 的環境,可以跑 Linux commands。 此外還有個選項是裝 Linux 雙系統。 還是再說一次,作為開發者絕對推薦使用 Linux commands,網路上的資源都是使用他,Windows 也慢慢推出可以跑 Linux commands 的環境,已經沒什麼顧慮了。 這邊有[官方教學](https://ubuntu.com/tutorials/command-line-for-beginners#1-overview),也可以邊碰邊查邊學,指令很多只需要認識基本的就行! ## 實際開發 - Editor / Jupyter Notebook  寫 code 跑程式,大家肯定有自己的一套。選擇很多,如果走一般路線那就是 editor 寫 code + terminal 跑程式和操作其他例如環境建置、版本控制等等工具。 - 推薦 Editor - [Visual Studio Code](https://code.visualstudio.com/) - [Sublime Text](https://www.sublimetext.com/) - [Vim](https://www.vim.org/) 如果新手想要有介面,或想要即時視覺化資料的,也可以用 [Jupyter Notebook](https://jupyter.org/)。他可以把程式碼、視覺化結果都整合在一個檔案裡,相當方便。缺點就是 project 一大,總沒辦法所有東西都塞在一個檔案裡,分散在不同檔案就變得很難管理架構。  *—— Jupyter Notebook 介面。* 還有個選擇是 IDE(整合開發環境),例如 [Visual Studio](https://visualstudio.microsoft.com/)、[PyCharm](https://www.jetbrains.com/pycharm/) 等等。他整合了很多東西,editor、terminal、環境配置、debugger、版本控制等等,但個人覺得比較適合大型 project,不太推薦用來寫 deep learning 小 project。一來他很慢,寫一個小 model 就要等個好幾分鐘只為了等他處理好他的事情。二來功能太多,找個 environment variable 在哪裡設都找不到。不過如果你習慣用 IDE,那當然也不反對。 ## 虛擬環境 - Anaconda  在一部電腦上,常常會有很多不同 project,每個 project 都會用到一些 library,各自需要的 library 可能還是不同版本。這時候如果一個 library 都設在同個地方,不同 project 的環境就會開始打架。 所以建置 virtual environment 是一個好習慣。他會為每個 project 設置自己獨立的環境,盡情安裝各自需要的 library 版本。 [Anaconda](https://www.anaconda.com/) 是最常見的適用於 machine learning project 的環境管理工具,還會先幫你裝好常用的幾個 library。基本上沒其他更好的選擇啦! 第一次使用的朋友要稍微熟悉一下基本 command,官方有[完整教學](https://conda.io/projects/conda/en/latest/user-guide/getting-started.html),也可以自己 Google 比較簡易的教學。主要會用到的 command 可以參照[這個 cheatsheet](https://www.datamachinist.com/cheat-sheets/anaconda-cheat-sheet/)。 ## 版本控制 - Git / GitHub  雖然不是必須,但想成為好的工程師,不能不會版本控制啊!版本控制就是,你的 code 修修改改會有很多個版本,但偶爾也想回到前個版本,所以不能只留最新的。為了避免出現一堆 `old`、`new`、`final` 在檔案名字裡,你應該要學一下 Git。 [Git](https://git-scm.com/) 會幫你記好所有檔案的歷史,方便你回溯到前一個版本,也可以和其他人協作同一份 code 而不會打架。[GitHub](https://github.com/) 則是用 Git 操作的 code 管理平台,通常用來和 teammate 合作,也可以當作備份 code 甚至展示 project 的地方。 總之學 Git 真的好處多多,不如趁現在早早學會,還能用在很多地方呢。不過新手要小心的是 Git 指令很多,一個操作不慎甚至整份 code 會全毀⋯⋯ Git 的教學很多,但這邊有一份自己之前寫的[教學文](https://github.com/pyliaorachel/git-very-good-tutorial),現在回去看還滿佩服自己的,寫得這麼詳盡。 ## 雲端服務 - GCP / AWS / Azure  建好 Neural Network 要開始訓練的時候,自己的電腦常常資源不足跑不動,或者是跑得動但跑下去其他事都不用做了。很多雲端服務都有專門為 Deep Learning 建置的環境,如果預估耗時長的訓練,可以開一個 instance 把 code 放上去跑。 雲端服務三巨頭: - [Google Cloud Platform](https://cloud.google.com/) - [Amazon Web Service](https://aws.amazon.com/) - [Azure](https://azure.microsoft.com/) 很多都有免費額度可以利用。 跟雲端服務溝通也需要熟悉一些工具,包括 [ssh](https://www.ssh.com/ssh/command/) 遠端連線操作 和 [tmux](https://github.com/tmux/tmux/wiki) session 管理工具,建議查一下資料。這邊也有一份 [VM Practical Tips](https://docs.google.com/document/d/1z9ST0IvxHQ3HXSAOmpcVbFU5zesMeTtAc9km6LAPJxk/edit) 可以參考。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up