入門深度學習— 1. 作為一個軟體工程師如何上手 ... - Steven Shen
文章推薦指數: 80 %
“入門深度學習— 1” is published by Steven Shen. ... 只需重複執行特定片段即可。
jupyter notebook 也允許文件內嵌,所以很適合拿來做教學或者分享。
GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWrite入門深度學習—1作為一個軟體工程師如何上手深度學習來到了2017年末,看看整個2017最火紅的技術不外乎是「深度學習」及「區塊鍊」,不過這兩項技術都不算好入門,要理解區塊鍊要有紮實的密碼學基礎,而要學好AI最好能有機器學習(MachineLearning)的相關知識。
雖然我自己也是資工本科畢業,也念過機器學習,但畢竟都是十幾年前的事情了。
最近幾個月開始重拾相關知識,網路上雖然有許多資源可以找,也有不少課程可以上,像是不久前上過coursera吳恩達(AndrewNg)的課程,但我覺得幫助最大的是fast.ai的入門課程,因為它從coding開始,先將深度學習當作一個黑盒子,作中學,再慢慢帶入相關ML/AI/框架的相關知識,這就像入門一個新的程式語言,在熟記語法之前,先照著打一次HelloWorld範例,久了自然就會了。
所以也因為這個因素,觸發我想把這個學習的過程記錄下來,或許也有其他軟體工程師也可以因受益。
fast.ai是很好的入門課程,但是他有幾個小缺點:教材有點舊。
在課程中,他所使用的Keras是1.0版本,但是Keras早已進展到2.0版本,API也有了一些改變,所以如果你是直接從fast.ai的github下載samplecode來執行,很可能是不會動的。
上課內容是全英文,廢話比較多。
其實老師講的都是必要的觀念,只是覺得有時候一些不重要的事情講很久,但是重要的部分卻很快帶過。
我會用1.25x或者1.5x速度在youtube上看,但是還是需要常常不斷重複回播看部分講解,很花時間所以我想試著寫幾篇入門文章,基礎還是來自於fast.ai,但會用比較新的開發環境跟框架版本來介紹,減少因為版本差異而帶來的困擾。
目的這篇文參考fast.ai的作法,一開始先從如何應用深度學習開始,先不去管怎麼建立模型(Model),也不去管怎麼訓練模型,我們先把「深度學習」當作一個黑盒子,拿一個預先訓練好的模型來玩看看。
這個預先訓練好的演算法稱之為VGG16,由牛津大學發表,可以判斷ImageNet資料庫中1000多個類別。
但是在這個範例中,我們只需要他判斷兩個類別:cats跟dogs,並且將判斷的結果拿來submit到Kaggle的DogsvsCatsRedux:KernelEdition挑戰。
Kaggle就像機器學習跟資料科學界的github,有各種資料科學的相關競賽,你可以參加上面的比賽,submit的結果會得到一個排名,跟世界其他地方的好手一較高下。
如果成績好的話,有機會讓你被世界一流的公司看中你的能力。
在Kaggle你也可以將你的解法(kernel)上傳,或者觀摩別人的解決方法,參與討論,所以Kaggle就是一個龐大的資料科學社群,世界頂尖的資料科學專家都在Kaggle上出沒。
Kaggle在2017年被Google併購,成為Google旗下的一員。
環境設定深度學習需要耗費相當大的運算資源,而且為了達到比較好的效率,最好是用有GPU顯卡的機器!如果不買有GPU顯卡的機器,也可以在網路上用租的,我比較了幾個方案:AWSP2Instance:0.9USD/hourFloydhub:0.59USD/hourPaperspace:0.4USD/hourPaperspace是目前最便宜的方案了,但要額外付Storage跟PublicIP的月費(約8塊美金);Floydhub最低階版本雖無須月費,但相比於GPU的使用鐘點費,我個人認為Paperspace是最經濟實惠的(不用時記得關機器!)。
怎麼設定Paperspace後面再來講,我們可以先用小資料量從自己的電腦上面來執行程式。
環境設定步驟如下:安裝anaconda。
anaconda預先包含了許多會用到的套件,像是python3、numpy、matplotlib、jupyter等等,管理也十分方便,不過建議安裝commandline版本就好。
下載範例程式:[email protected]:syshen/dogs-vs-cats-vgg16.git$cddogs-vs-cats-vgg163.上Kaggle註冊kaggle帳號,安裝kagglecommandlinetool:$pipinstallkaggle-cli4.在Kaggle競賽網頁同意競賽規則,然後使用kaggle-cli下載訓練資料與測試資料:$mkdir-pdata/redux;cddata/redux$kgdownload-uusername-ppassword-cdogs-vs-cats-redux-kernels-edition$unziptest.zip$unziptrain.zip5.安裝Keras,這個步驟會一併安裝tensorflow作為keras的backend。
Keras是一套Python的機器學習框架,最早是由一位Google工程師設計,它是一套比較高階的抽象化的包裝,底層可以接上其他機器學習的框架像是tensorflow跟Theano。
他的好處是簡單容易學,程式碼精簡。
$condainstallkeras6.執行Jupyternotebook$jupyternotebookJupyternotebook會很常用到,透過jupyternotebook你可以用瀏覽器編修程式、逐步執行、紀錄狀態、以圖顯示執行結果。
深度學習程式往往需要很長的運算時間,透過jupyternotebook可以不用每次都重頭執行完整程式碼,只需重複執行特定片段即可。
jupyternotebook也允許文件內嵌,所以很適合拿來做教學或者分享。
在執行jupyter後,會自動開啟瀏覽器,到瀏覽器中打開dogs_cats_vgg16.ipynb檔。
Jupyternotebook中的所有檔案列表接下來你就可以按照dogs_cats_vgg16.ipynb檔中的說明逐步執行來完成第一個深度學習的程式了。
程式說明整段程式分做幾個大的步驟:整理dataset模型再訓練測試與驗證將結果上傳kaggle整理dataset因為使用的資料是下載於kaggle的dogsvscatsredux:kerneledition挑戰項目,檔案放的方式跟keras有點不同,所以我們需要重新按照keras的目錄結構去放,此外為了避免資料量太大在我們自己的電腦上跑太久,所以額外copy一份比較少的資料來作為練習用。
第一次你可以先使用樣本資料來練習,跑過一次後,再使用GPU機器跑完整的資料。
模型再訓練VGG16預先訓練好的模型可以辨識1000組類別,但是我們只需要兩個,所以要對原有的模型做再調適,但不是拿整個ImageNet的圖片來重新訓練,那太花時間了,而是換掉最後的輸出層後再加上另外一層輸出層,只輸出兩個類別,針對這層新加的輸出層去訓練即可。
測試與驗證重新訓練出來的模型,我們透過人工的方式檢視預測結果,這邊可以知道怎麼檢視模型辨識結果,包含混淆矩陣ConfusionMatrix。
混淆矩陣就是將測試的結果分做Truepositive,Falsenegative,Falsepositive,以及Truenegative。
Truepositive跟Truenegative都是正確的判斷,但是Falsenegative與Falsepositive都是錯誤的判斷。
透過混淆矩陣可以很清楚的了解整體測試的準確度。
測試結果的混淆矩陣結果上傳Kaggledogsvscats挑戰的測試資料總共有12500張圖片,程式最後跑完的結果要完成這12500張圖片的判斷,儲存成一個csv檔手動上傳。
上傳完畢後,Kaggle會計算loss的log值最為score,score越低越好,排名也會越高。
dogsvscats的score計算方式:https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition#evaluation詳細請看範例程式的notebook:syshen/dogs-vs-cats-vgg16Contributetodogs-vs-cats-vgg16developmentbycreatinganaccountonGitHub.github.com使用Paperspace的GPU機器前面提到你會需要一台GPU機器,如果手邊沒有的話,可以先用線上的方案,Paperspace的價格應該會比AWS跟Floydhub來得便宜。
在註冊完Paperspace帳號後,選定ML-In-a-Boxtemplate建立機器,這個template幫你事先安裝好所有開發MachineLearning所需要的套件,其中包含Python2/3、anaconda、Keras、tensorflow、Cafe、PyTorch以及Jupyternotebook等等。
設定完後Paperspace會將密碼寄給你,我自己的習慣是綁定一個PublicIP,然後使用ssh連進去使用。
keras在安裝時,會重複安裝一次tensorflow作為backend,但是那份tensorflow是支援CPU的版本,而非GPU版本,所以建議的安裝方式是先移除所有tensorflow套件,再手動透過anaconda安裝tensorflow-gpu以及tensorflow-gpu-base,然後是keras:$condauninstalltensorflow$condauninstalltensorflow-base$condainstalltensorflow-gpu$condainstall--no-depskeras然後安裝gpustat,透過gpustat你可以觀察GPU顯卡的運作狀態,底層是透過執行nvidia-smi工具將Nvidia的資料dump出來顯示,包含顯卡溫度、運作中的程序等等,所以透過gpustat你可以知道你的程式有沒有好好善用GPU的效能。
$pipinstallgpustat我第一次跑的時候,發現執行速度很慢,最後是透過nvidia-smi/gpustat才知道安裝的tensorflow根本是CPU版本,GPU一點動作都沒有,重新安裝成GPU版本的tensorflow後就解決了這個問題,所以這個小工具很重要啊!gpustat會顯示GPU使用狀態接下來一樣要跑jupyter,但是因為是跑在遠端伺服器上,所以要多作一些額外的設定讓你可以連進去使用:產生Jupyter設定檔,並設定密碼。
當你使用browser連進jupyternotebook時,會需要輸入這組密碼來進去,這是預防當你把jupyternotebook放到公開網路時,被人進去惡搞。
$jupyternotebook--generate-config$jupyternotebookpassword2.設定jupyterserver綁定IP位址編輯~/.jupyter/jupyter_notebook_config.py將binding的IPaddress改成“*”3.設定防火牆ufw,允許外部連進8888port$sudoufwallow88884.執行$jupyternotebook接下來你就可以直接用browser連到該機器PublicIP的8888Port使用Jupyternotebook結語這兩年AI與深度學習大放異彩,Google透過AlphaGo讓一般大眾看到人工智慧的潛能,而且從今年起對岸不管是大公司、新創公司、或者各路創投紛紛投入大量的資金培養人才,落地AI應用,明年2018中國對於AI的總投資金額將超越美國,所以今年是AI興起的一年,明年開始將會進入到開花結果的階段,如果現在不學習AI將會錯過這一波機會,以後會更難追上。
我自己覺得我起步慢了,但是我想總比不動好,所以未來會花更多重心在學習AI這塊,也會試著寫更多心得紀錄,如果你覺得我這篇對你有幫助的話,多給我一些「拍手」吧。
MorefromStevenShenFollowCo-founder/CTOofCubo,SmartAIBabyMonitorLovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstartedStevenShen1.4KFollowersCo-founder/CTOofCubo,SmartAIBabyMonitorFollowMorefromMediumTechnicalSourceworkingwithkolmogrovtestAkshayBahadur👨🚀Quick,Draw🖌️🖼️arashdehghanianserejHowsaveandloadaTensorflow/KerasentiremodelwithcustomLayerAbhijitJadhavDeepfakeVideoDetectionUsingLongShort-TermMemoryHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 1Day 02:撰寫第一支Neural Network 程式-- 阿拉伯數字辨識
Machine Learning 框架(Framework)GitHub評比,資料來源:【AI關鍵技術】三大熱門深度學習框架新進展。 其中,TensorFlow 網路聲量最高,因此,我們採用它作...
- 2入門深度學習— 1. 作為一個軟體工程師如何上手 ... - Steven Shen
“入門深度學習— 1” is published by Steven Shen. ... 只需重複執行特定片段即可。jupyter notebook 也允許文件內嵌,所以很適合拿來做教學或者分享。
- 3如何從零開始自學python與deep learning
近幾年來由於深度學習等相關技術蓬勃發展,同時產生許多新的工作機會,例如: 資料科學家、機器學習工程師、數據分析師等等。加上時下流行的深度學習模型大都以較親民的 ...
- 4深度學習 - 清華大學開放式課程
【教學】, 機器學習理論、雲端資料庫、APP創業與實作. 【研究】, 機器學習、巨量資料處理、App 智能. http://www.cs.nthu.edu.tw/~shwu/.
- 5由淺入深的深度學習資源整理 - LeeMeng
這裡紀錄了我在學習深度學習時蒐集的一些線上資源。內容由淺入深,而且會一直被更新, ... Github Repo 包含了多個教學筆記本,值得參考。