入門深度學習— 1. 作為一個軟體工程師如何上手 ... - Steven Shen

文章推薦指數: 80 %
投票人數:10人

“入門深度學習— 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



請為這篇文章評分?