基於TensorFlow的深度學習實戰

七月線上實驗室發表於2018-04-25

TensorFlow是Google的開源深度學習庫,在圖形分類、音訊處理、推薦系統和自然語言處理等場景下都有豐富的應用。毫不誇張得說,TensorFlow的流行讓深度學習門檻變得越來越低,只要你有Python和機器學習基礎,入門和使用神經網路模型變得非常簡單。

TensorFlow簡介

如前所述,TensorFlow是一個深度學習庫,使用這一框架,可以用來構建和測試深度神經網路。

深度學習讓我們能夠以極高的準確性構建複雜的應用程式。影象、視訊、文字、音訊等領域的問題,都可以通過深度學習解決。TensorFlow可以用於實現前述所有應用。

TensorFlow很快成為GitHub上使用者最多的深度學習框架。這個庫之所以如此流行,是因為開發人員可以輕鬆的用其來搭建、測試和部署機器學習應用。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

上面是一個TensorFlow的示意圖。我們不用關心這張圖具體代表什麼,但你需要知道,其中的橢圓和正方形代表節點,節點就是一些數學函式,你可以將節點分組形成各種數學計算,並得到輸出。

箭頭代表流動到各個節點的資料。所以TensorFlow也被成為資料流庫。

TensorFlow從入門到應用

安裝TensorFlow

一般來講,使用Python工作時最好用virtualenv虛擬環境。Virtualenv可以在一臺機器不同的專案間保持Python依賴隔離。使用virtualenv安裝TensorFlow不會覆蓋已有的Python版本,這樣做也能使排查安裝問題變得更容易。

首先安裝必備軟體:

# Ubuntu/Linux 64-bit
$ sudo apt-get install python-pip python-dev python-virtualenv # Mac OS X
$ sudo easy_install pip $ sudo pip install --upgrade virtualenv

建立virtualenv環境. 為了將環境建在 ~/tensorflow 目錄下, 執行:

$ virtualenv --system-site-packages ~/tensorflow

接下來啟用virtualenv:

$ source ~/tensorflow/bin/activate #  with bash 
$ source ~/tensorflow/bin/activate.csh #  with csh
(tensorflow)$

Once the virtualenv is activated, you can use pip to install TensorFlow inside it:
啟用virtualenv後即可使用pip在virtualenv內安裝TensorFlow:

# Ubuntu/Linux 64-bit, CPU only:
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl # Mac OS X, CPU only:
(tensorflow)$ sudo easy_install --upgrade six (tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl

你可訪問官方文件來確認所安裝的版本。

如果你要在GPU上跑你的程式碼,你需要訪問官方文件來看看是否滿足指定的要求。執行Tensorflow GPU需要安裝額外的軟體。

當你使用完後可執行如下命令關閉虛擬環境:

(tensorflow)$ deactivate

其它安裝TensorFlow的方法請訪問官方網站獲取資訊。

TensorFlow的 “Hello World”

你可以使用任何文字編輯器編寫python程式碼,然後儲存為副檔名“.py”的檔案(eg test.py)。用python命令列即可執行test.py。

為了快速的熟悉TensorFlow程式設計,下面從一段簡單的程式碼開始:

import tensorflow as tf

 a = tf.placeholder("float")
 b = tf.placeholder("float")

 y = tf.mul(a, b)

 sess = tf.Session()
print sess.run(y, feed_dict={a: 3, b: 3})

在上面的程式碼中,匯入Python模組tensorflow。然後定義符號變數,也稱為佔位符。在後面程式執行中會操作這些變數。我們把這些變數作為引數,TensorFlow的乘法函式tf.mul會呼叫。數學函式tf.mul會操作tensor,這時的動態大小、多維陣列。

TensorFlow的算術操作如下:

tf.add,tf.sub,tf.mul,tf.div,tf.mod,tf.abs,tf.neg,tf.sign,tf.inv,tf.square,tf.round,tf.sqrt,tf.pow,tf.exp,tf.log,tf.maximum,tf.minimum,tf.cos,tf.sin

TensorFlow也為程式設計師提供一些函式來進行數學操作,列表如下:

操作描述
tf.diag給定對角線上的值,返回對角tensor
tf.transpose轉置
tf.matmultensor乘法,即矩陣乘法
tf.matrix_determinant方陣的行列式
tf.matrix_inverse方陣的逆矩陣

接下來,建立一個會話。事實上,直到這步還沒有執行TensorFlow程式碼。程式通過Session()建立一個會話與Tensorflow庫互動;直到呼叫run()方法才會建立會話,並執行指定的程式碼。在本例中,run()方法呼叫變數值和feed_dict引數,表示式執行完成退出會顯示結果9 。

本例比較簡單,僅僅為了展示TensorFlow完整的過程。然而,我們更感興趣的是靈活的結構化程式碼,插入操作來構建計算圖。比如,類似於Python程式設計中的IPython。為了達到這個目的,TensorFlow提供了tf.InteractiveSession()類。


上面的計算圖描述的是數學計算。節點(node)代表數學操作,但是它們也可以代表資料項的點,輸出結果或者讀寫持久化的變數。邊(edge)描述的是輸入和輸出的節點之間的關係。

TensorFlow 將圖形定義轉換成分散式執行的操作, 以充分利用可用的計算資源(如 CPU 或 GPU). 一般你不需要顯式指定使用 CPU 還是 GPU, TensorFlow 能自動檢測. 如果檢測到 GPU, TensorFlow 會盡可能地利用找到的第一個 GPU 來執行操作.

平行計算能讓代價大的演算法計算加速執行,TensorFlow也在實現上對複雜操作進行了有效的改進。大部分核相關的操作都是裝置相關的實現,比如GPU。下面是一些重要的操作:

操作分組操作
MathsAdd, Sub, Mul, Div, Exp, Log, Greater, Less, Equal
ArrayConcat, Slice, Split, Constant, Rank, Shape, Shuffle
MatrixMatMul, MatrixInverse, MatrixDeterminant
Neuronal NetworkSoftMax, Sigmoid, ReLU, Convolution2D, MaxPool
CheckpointingSave, Restore
Queues and syncronizationsEnqueue, Dequeue, MutexAcquire, MutexRelease
Flow controlMerge, Switch, Enter, Leave, NextIteration

邏輯迴歸問題與模型

前面的Hello world應用並沒有訓練模型,接下來介紹一個邏輯迴歸問題與模型。我們使用numpy構建一組線性關係的資料,通過TensorFlow實現的隨機梯度演算法,在訓練足夠長的時間後可以自動求解函式中的斜率和截距。

640?wx_fmt=jpeg

上面的程式碼可以在tensorflow_examples專案(https://github.com/tobegit3hub/tensorflow_examples/blob/master/linear_regression.py)中找到,經過訓練,我們看到輸出的斜率w約為2,截距b約為10,與我們構建的資料之間的關聯關係十分吻合!注意在TensorFlow程式碼中並沒有實現最小二乘法等演算法,也沒有if-else來控制程式碼邏輯,完全是由資料驅動並且根據梯度下降演算法動態調整Loss值學習出來的。這樣我們即使換了其他資料集,甚至換成影象分類等其他領域的問題,無需修改程式碼也可以由機器自動學習,這也是神經網路和TensorFlow強大的地方。


前面的模型只有w和b兩個變數,如果資料處於非線性關係就難以得到很好的結果,因此我們建議使用深層神經網路,這也是TensorFlow設計重點就要解決的深度學習模型。Google在2014年憑藉Inception模型贏下了ImageNet全球競賽,裡面程式碼就是基於TensorFlow實現的,下面是較為複雜的模型定義程式碼。

640?wx_fmt=jpeg

使用TensorFlow已經封裝好的全連線網路、卷積神經網路、RNN和LSTM,我們已經可以組合出各種網路模型,實現Inception這樣的多層神經網路如拼湊Lego一樣簡單。但在選擇優化演算法、生成TFRecords、匯出模型檔案和支援分散式訓練上,有較多的細節,大家在實際練習中要多加註意。

深度學習實戰

TensorFlow是很好的深度學習框架,希望在深度學習方向有更深入的學習和實踐的同學,七月線上特此推出《深度學習集訓營》課程,略過Python基礎,從TensorFlow搭建DNN解決問題起步,實戰BAT工業專案。

線上線下結合(線下在北京和上海),從頭到尾全部實戰,涵蓋特徵工程、深度學習在計算機視覺和自然語言處理領域中的應用,更有大規模車輛圖片檢索等應用於智慧城市、視訊監控等場景的殺手級專案。

640?wx_fmt=png

加入課程,你將體驗到以下優質服務:

全是深度學習的典型應用場景

涵蓋特徵工程、混合網路、深度學習在計算機視覺當中的應用(比如影象分類、影象檢索)、深度學習在自然語言處理中的應用(比如文字處理、文字分類、影象生成文字)、聊天機器人大規模車輛圖片檢索等應用於智慧城市、視訊監控等安防場景的BAT工業專案。

BAT專家級講師 + 助教全方位輔導

我們擁有來自BAT的專家級講師和數位助教,給你全程全天候1v1般的定製輔導。平時晚上線上學習,週末線下專案實戰,從而通過線上直播從頭到尾掌握深度學習典型應用場景,通過線下專案實戰練就DL工業專案的全棧能力。且有問題,課上課後隨時答疑,手把手教會為止。

提供GPU雲實驗平臺

還原BAT真實生產環境,提供工業資料和國內首創的價值數十萬的GPU雲實驗平臺(提前裝tensorflow、caffe、mxnet等主流DL框架和相關資料)。提供完善的實驗平臺供您動手、真槍實戰,拒絕紙上談兵。

作業專案考核三管齊下

開課前提供機器學習、深度學習相關的線上課程做預習。每次課通過GPU + Jupyter Notebook + GitHub線上提交作業,然後講師和助教1v1線上批改、講解作業,且提供可執行的互動式程式碼,在不斷的階段性實戰和考試中掌握機器學習技能。

高起步 + 簡歷優化

從特徵工程、TensorFlow起步,一上來就實戰BAT工業專案。且根據集訓營實戰專案,將涉及到的關鍵知識點和專案經歷優化到您的簡歷中。

面試求職輔導 + 就業推薦

精講深度學習工程師面試時常見考點/模型/演算法,且BAT一線技術經理1v1模擬真實面試,從技術、表達等方面全方位提升您的面試能力。根據您的技術特長提供定製化的能力評估、就業指導以及包括BAT等一線網際網路公司的工作機會推薦。2個月挑戰年薪30~50萬。


掃描下方二維碼,免費試聽

640?wx_fmt=png

相關文章