基於TensorFlow的深度學習實戰
TensorFlow是Google的開源深度學習庫,在圖形分類、音訊處理、推薦系統和自然語言處理等場景下都有豐富的應用。毫不誇張得說,TensorFlow的流行讓深度學習門檻變得越來越低,只要你有Python和機器學習基礎,入門和使用神經網路模型變得非常簡單。
TensorFlow簡介
如前所述,TensorFlow是一個深度學習庫,使用這一框架,可以用來構建和測試深度神經網路。
深度學習讓我們能夠以極高的準確性構建複雜的應用程式。影象、視訊、文字、音訊等領域的問題,都可以通過深度學習解決。TensorFlow可以用於實現前述所有應用。
TensorFlow很快成為GitHub上使用者最多的深度學習框架。這個庫之所以如此流行,是因為開發人員可以輕鬆的用其來搭建、測試和部署機器學習應用。
上面是一個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.matmul | tensor乘法,即矩陣乘法 |
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。下面是一些重要的操作:
操作分組 | 操作 |
---|---|
Maths | Add, Sub, Mul, Div, Exp, Log, Greater, Less, Equal |
Array | Concat, Slice, Split, Constant, Rank, Shape, Shuffle |
Matrix | MatMul, MatrixInverse, MatrixDeterminant |
Neuronal Network | SoftMax, Sigmoid, ReLU, Convolution2D, MaxPool |
Checkpointing | Save, Restore |
Queues and syncronizations | Enqueue, Dequeue, MutexAcquire, MutexRelease |
Flow control | Merge, Switch, Enter, Leave, NextIteration |
邏輯迴歸問題與模型
前面的Hello world應用並沒有訓練模型,接下來介紹一個邏輯迴歸問題與模型。我們使用numpy構建一組線性關係的資料,通過TensorFlow實現的隨機梯度演算法,在訓練足夠長的時間後可以自動求解函式中的斜率和截距。
上面的程式碼可以在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實現的,下面是較為複雜的模型定義程式碼。
使用TensorFlow已經封裝好的全連線網路、卷積神經網路、RNN和LSTM,我們已經可以組合出各種網路模型,實現Inception這樣的多層神經網路如拼湊Lego一樣簡單。但在選擇優化演算法、生成TFRecords、匯出模型檔案和支援分散式訓練上,有較多的細節,大家在實際練習中要多加註意。
深度學習實戰
TensorFlow是很好的深度學習框架,希望在深度學習方向有更深入的學習和實踐的同學,七月線上特此推出《深度學習集訓營》課程,略過Python基礎,從TensorFlow搭建DNN解決問題起步,實戰BAT工業專案。
線上線下結合(線下在北京和上海),從頭到尾全部實戰,涵蓋特徵工程、深度學習在計算機視覺和自然語言處理領域中的應用,更有大規模車輛圖片檢索等應用於智慧城市、視訊監控等場景的殺手級專案。
加入課程,你將體驗到以下優質服務:
全是深度學習的典型應用場景
涵蓋特徵工程、混合網路、深度學習在計算機視覺當中的應用(比如影象分類、影象檢索)、深度學習在自然語言處理中的應用(比如文字處理、文字分類、影象生成文字)、聊天機器人、大規模車輛圖片檢索等應用於智慧城市、視訊監控等安防場景的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萬。
掃描下方二維碼,免費試聽
相關文章
- 【深度學習-基於Tensorflow的實戰】公開課實況深度學習
- 基於pytorch的深度學習實戰PyTorch深度學習
- 深度學習:TensorFlow入門實戰深度學習
- 基於TensorFlow Serving的深度學習線上預估深度學習
- 《深度學習案例精粹:基於TensorFlow與Keras》案例集用於深度學習訓練深度學習Keras
- 深度學習Tensorflow實戰,新課進行曲!深度學習
- 推薦閱讀《Tensorflow:實戰Google深度學習框架》Go深度學習框架
- 《Tensorflow:實戰Google深度學習框架》圖書推薦Go深度學習框架
- 基於PaddlePaddle的詞向量實戰 | 深度學習基礎任務教程系列深度學習
- 深度學習之tensorflow2實戰:多輸出模型深度學習模型
- 深度學習:基於K8S的分散式Tensorflow系統深度學習K8S分散式
- 基於Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度學習環境UbuntuPython深度學習
- 基於PaddlePaddle的詞向量實戰 | 深度學習基礎任務教程系列(二)深度學習
- 實戰 | 基於深度學習模型VGG的影象識別(附程式碼)深度學習模型
- 基於PaddlePaddle的影象分類實戰 | 深度學習基礎任務教程系列(一)深度學習
- 基於PaddlePaddle的影像分類實戰 | 深度學習基礎任務教程系列(一)深度學習
- 基於PaddlePaddle的圖片分類實戰 | 深度學習基礎任務教程系列深度學習
- 面向機器智慧的TensorFlow實戰4:機器學習基礎機器學習
- 《深度學習之TensorFlow》pdf深度學習
- 深度學習之Tensorflow框架深度學習框架
- 基於CPU的深度學習推理部署優化實踐深度學習優化
- 基於深度學習的影像分割在高德的實踐深度學習
- Tensorflow 深度學習簡介(自用)深度學習
- 深度學習--Tensorflow初體驗深度學習
- 【機器學習基礎】關於深度學習的Tips機器學習深度學習
- [OpenCV實戰]1 基於深度學習識別人臉性別和年齡OpenCV深度學習
- 美團如何基於深度學習實現影像的智慧稽核?深度學習
- faced:基於深度學習的CPU實時人臉檢測深度學習
- 深度學習--實戰 LeNet5深度學習
- 《深度學習:21天實戰Caffe》深度學習
- 基於Sklearn機器學習程式碼實戰機器學習
- 深度學習tensorflow 之 distorted_inputs深度學習
- 深度學習|基於MobileNet的多目標跟蹤深度學習演算法深度學習演算法
- 面向機器智慧的TensorFlow實戰2:TensorFlow基礎
- InterPSS :基於 TensorFlow 的電力系統分析機器學習機器學習
- InterPSS :基於TensorFlow的電力系統分析機器學習機器學習
- 【AI in 美團】如何基於深度學習實現影象的智慧稽核?AI深度學習
- 下一代實時渲染——基於深度學習的渲染深度學習