1. 程式人生 > 其它 >看完這個,不用寫程式碼就能實現深度學習了

看完這個,不用寫程式碼就能實現深度學習了

2006年,機器學習界泰斗Hinton,在Science上發表了一篇使用深度神經網路進行維數約簡的論文 ,自此,神經網路再次走進人們的視野,進而引發了一場深度學習革命。深度學習之所以如此受關注,是因為它在諸如影象分類、目標檢測與識別、目標跟蹤、語音識別、遊戲(AlphaGo)等多個領域取得了相當優秀的成績,掀起了又一波人工只能浪潮。深度學習技術逐漸成為機器學習領域的前沿技術,近年來得到了突飛猛進的發展,這得益於機器學習技術的進步以及計算裝置效能的提升。英偉達公司研發的圖形處理器(Graphics Processing Unit,GPU),無疑為深度學習的發展提供了強有力的硬體支撐!

英偉達想必大家都有所耳聞,但對英偉達開發的深度學習訓練系統(NVIDIA Deep Learning GPU Training System, DIGITS) 知之甚少,今天我們介紹如何使用DIGITS,實現基於深度神經網路的影象分類,包括資料集建立、模型建立、模型訓練、模型測試等等。

面對眾多的深度學習開發框架,你是不是安裝配置深度學習開發框架環境中,是不是苦於碼程式碼、除錯改Bug中。那麼,今天你將發現,世界上還有一款超級簡單易用的深度學習平臺工具,是的,這就是DIGITS。說到底,DIGITS是對現有流行深度學習開發框架的最高階的抽象封裝,你所需做的只不過是點點按鈕、改改引數,就能輕鬆實現基於深度學習模型的影象分類、目標檢測、分割等任務,並以圖形介面的方式展現出來。目前DIGITS支援 Caffe、Torch,7月份將開始支援Tensorflow,開發人員,正在努力工作,使其支援更多的深度學習框架,如下圖所示:

DIGITS支援的深度學習框架(來自英偉達官網)

下面,讓我們一起學習如何使用DIGITS,實現基於深度卷積網路的手寫體影象分類任務,讓我們一起成為人工智慧時代的弄潮兒!

DIGITS安裝

由於本文重點介紹如何使用DIGITS實現深度學習影象分類,這裡僅給出安裝參考與注意事項。

現今,DIGITS已經有了三種安裝姿勢:

● Ubuntu 包管理器 ● Docker ● 原始碼編譯

具體請移步 NVIDIA DIGITS Installation。2015年時,DIGITS出道時還只有原始碼安裝方式,時隔一年竟然有了 deb 安裝方式,果斷試用,按照官方說明分分鐘安裝完畢~.~

注:Ubuntu16.04下安裝Caffe,會有比較多的坑,跳進去再跳出來就行了,不過,對於初學者,可能得幾個小時,甚至幾天的時間才能跳出來。

無論哪種安裝姿勢,都要確保有以下核心實料:

● 裝有GPU卡的PC機(有伺服器更好); ● Linux系統(建議Ubuntu,本文 Ubuntu16.04 LTS); ● CUDA驅動(本文版本8.0,Linux版有 run 和 deb 兩種安裝包,前者需要解除安裝系統自帶驅動,一不小心可能就進不去圖形介面了,需謹慎 ,具體安裝方法,參見英偉達官方安裝手冊)或自行搜尋; ● 深度學習框架:如 Caffe, CNTK, TensorFlow, Theano and Torch 等其中的一種或多種(目前支援Caffe和Torch); ● DIGITS

Ubuntu deb 包安裝

很簡單,開啟終端(快捷鍵 Ctrl + Alt + T),執行如下命令,既可以自動安裝 digits, caffe-nv, torch7-nv, libcudnn,其中,xxx-nv 是指英偉達 fork 的xxx框架版本。具體安裝方法,參見:DIGITS Ubuntu Installation。

DIGITS Ubuntu deb 安裝命令

#新增源
# For Ubuntu 16.04
CUDA_REPO_PKG=http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
ML_REPO_PKG=http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb


# Install repo packages
wget "$CUDA_REPO_PKG" -O /tmp/cuda-repo.deb && sudo dpkg -i /tmp/cuda-repo.deb && rm -f /tmp/cuda-repo.deb
wget "$ML_REPO_PKG" -O /tmp/ml-repo.deb && sudo dpkg -i /tmp/ml-repo.deb && rm -f /tmp/ml-repo.deb


# Download new list of packages
sudo apt-get update
# Install 
sudo apt-get install digits

原始碼安裝

DIGITS的原始碼可以在GitHub上找到,即這裡:GitHub DIGITS,具體編譯構建安裝過程參見:NVIDIA DIGITS Source Installation。

提示:

安裝過程若提示錯誤:ImportError: No module named setuptools 可以使用 sudo apt install python-setuptools 解決。

cd ~/sfw
git clone https://github.com/NVIDIA/DIGITS.git

DIGITS使用入門

終於可以開始使用DIGITS了,首先開啟你的瀏覽器,然後:

● 對於使用deb包安裝的童鞋,在瀏覽器位址列輸入 http://localhost/ 訪問 DIGITS server 主頁; ● 對於採用其他安裝方式(using digits-devserver)的童鞋,在瀏覽器位址列輸入 http://localhost:5000/ 訪問 DIGITS server 主頁;

現在開始吧!DIGITS server主頁介面如下,可見使用DIGITS做深度學習應用,非常簡單明瞭人性化,就是點點按鈕的事;點選圖中Images下拉選單按鈕,可以看到,如今DIGITS已經支援 影象預處理、分類、目標識別、分割:等多種學習任務。

DIGITS Server Home 頁簡介

廢話少說,開始正題,使用 DIGITS ,基本分三步:

● 第一步:準備並建立資料集 ● 第二步:設計並建立任務模型 ● 第三步:訓練測試模型

下面以手寫體分類為例,說明如何利用 DIGITS,輕鬆實現基於深度學習中的卷積神經網路的影象分類任務。

使用DIGITS實現基於深度學習的影象分類

● 資料集:手寫體資料集 MNIST:含 0~9 十個數字,60000個訓練樣本,10000個測試樣本;

● 網路模型:卷積神經網路 LeNet-5:一種卷積神經網路。

詳情參見 Yann LeCun 主頁。

下載MNIST資料集

你可訪問上述資料集連結下載並解壓資料,也可以使用 DIGITS 提供的資料集下載工具直接下載解壓資料,資料會被下載到你指定的目錄下(yourdir),本文中:

python -m digits.download_data mnist ~/yourdir/mnist

下載完成後,在你指定的目錄下可以看到如下檔案:

建立資料集

在DIGITS server Home頁,以此選擇 Datasets > New Dataset > Images > Classification ,然後隨便取個使用者名稱(username),提交(Submit),在彈出的頁面中,按下圖所示填寫資料集資訊。

DIGITS MNIST 資料集建立頁面

建立完成後,可以在MNIST資料集頁面檢視驗證資料集資訊,如下圖所示:

建立好的MNIST資料集頁面

建立好的MNIST資料集的訓練集統計資訊如下圖所示:

訓練集統計資訊——頻率直方圖

建立模型

我們使用經典的LeNet模型來實現手寫體影象的分類,LeNet是一個卷積神經網路,它依次包含一個輸入層(INPUT)、卷積層(C1)、池化層,也叫下采樣層(S2)、卷積層(C3)、下采樣層(S4)、卷積層(C5)、全連線層(F6)和一個輸出層,由於有0~9個數字,所以輸出層的神經元的個數是10。這麼複雜的結構,寶寶得寫多少行程式碼,寶寶不想當程式猿 ~,~

用於手寫體分類的LeNet網路結構

然而,你不用擔心,使用DIGITS,你只需要點點按鈕,改改引數即可,由於是經典模型,這裡連該引數都不用,點按鈕就行了。點選左上角的 DIGITS 按鈕,返回主頁,此時,可以看到資料集(DataSets)頁面多了個剛剛建立的MNIST資料集。依次選擇 Models > New Model > Images > Classification 彈出模型設定介面,依次按如下步驟操作:

● 在Select Dataset 區選擇 “MNIST” 資料集; ● 在下面的Standard Networks 標籤頁選擇Caffe 版的 LeNet network; ● 選擇GPU; ● 給模型命個名字; ● 點選 Create 按鈕建立模型

如下圖所示:

用於手寫體分類的LeNet網路模型訓練與測試設定

當然,你也可以設定訓練代數、驗證間隔(代數)、優化方法、學習率等引數。

訓練模型

建立完模型後,DIGITS 開始網路的訓練,並實時顯示訓練損失、驗證損失、驗證正確率、學習率變化、GPU資源佔用等資訊,如下圖所示,非常直觀和友好,有木有,~.~

DIGITS MNIST LeNet分類網路訓練過程圖

喝杯咖啡,或出去溜達溜達即可!

測試

現在到了測試你的模型的時候了,如下圖所示,有三種選擇:

● Classify One:單幅影象分類,可以視覺化資料、權重、隱藏層輸出等; ● Classify Many:多幅影象分類,可以檢視多幅影象的分類結果統計資訊; ● Top N Predictions per Category:每類的Top N分類預測圖示。

測試你的手寫體分類模型

上述手寫體分類模型,對數字6的某幅影象分類結果如下圖所示,非常直觀友好有木有,寶寶瞬間喜歡上人工智慧了耶:

上述手寫體分類模型,對10000個測試樣本影象的分類統計結果如下圖所示,哇,這麼高大上的矩陣我也有了:

上述手寫體分類模型,Top N分類統計結果如下圖所示,寶寶決定要搞深度了,誰都不能阻擋我:

後記

本文介紹了 DIGITS 及其安裝,以及使用 DIGITS 進行影象分類的步驟與方法,包括資料集的建立、模型的建立與訓練、模型測試等等。總結起來,使用DIGITS做深度學習應用,簡直就是點點點,免去了使用Caffe等其它框架繁瑣的環境配置、枯燥的碼程式碼 Debug 的過程,你不需要去學習Python等語言,你甚至都不需要了解模型演算法原理,就能輕鬆享受深度學習的樂趣,這一切 DIGITS 都已經為你做好,簡直太爽啦!~.~ ~.~ ~.~

如果你不是程式猿,如果你不瞭解深度學習,如果你不知道選擇何種深度學習框架,如果你不想把精力耗費在碼程式碼上,而你卻非常想了解深度學習,以至於你想成為人工智慧時代的弄潮兒,那麼DIGITS是你最好的入門選擇!生活原本很簡單,為什麼要過得複雜呢?