TensorFlow是什么?
TensorFlow基于數據流圖郭毕,用于大規(guī)模分布式數值計算的開源框架它碎。節(jié)點表示某種抽象的計算,邊表示節(jié)點之間相互聯(lián)系的張量显押。
TensorFlow支持各種異構的平臺扳肛,支持多CPU/GPU,服務器乘碑,移動設備挖息,具有良好的跨平臺的特性;TensorFlow架構靈活蝉仇,能夠支持各種網絡模型旋讹,具有良好的通用性;此外轿衔,TensorFlow架構具有良好的可擴展性沉迹,對OP的擴展支持,Kernel特化方面表現(xiàn)出眾害驹。
TensorFlow最初由Google大腦的研究員和工程師開發(fā)出來鞭呕,用于機器學習和神經網絡方面的研究,于2015.10宣布開源宛官,在眾多深度學習框架中脫穎而出葫松,在Github上獲得了最多的Star量瓦糕。
前世今生:
誕生的大環(huán)境
? 15年9月發(fā)布0.1版本;17年2月發(fā)布1.0版本腋么;19年3月發(fā)布2.0版本咕娄。
? 15年同類型框架:
? Ski-learn: Machine Learning, 不支持GPU;
? Caffe: 第一個面向深度學習的框架,但不支持自動求導;
? Keras: 只提供API接口;
? Torch: Lua語言;
? Teano: 開發(fā)調試難珊擂。
當下市場環(huán)境
? 當下同類型框架:
? Caffe: Facebook
? Caffe2: PyTorch(最新版本的Caffe2 作為PyTorch的C++后端已經并入到PyTorch里去)圣勒。
? Torch–PyTorch。PyTorch當下非常流行的框架摧扇,集合了Torch和Caffe2圣贸,F(xiàn)acebook主推。
? Teano: Google推出 Tensorflow1.0 ----Tensorflow2.0扛稽。
V1.0市場占有率
? 截止到TensorFlow1.1.3版本:
? Github中TensorFlow有大約121,372的store:
? PyTorch有25,181的store:
流行框架得分
系統(tǒng)概述
整個系統(tǒng)從底層到上層可分為七層:
1.最底層是硬件計算資源吁峻,支持CPU、GPU在张;
2.支持兩種通信協(xié)議用含;
3.數值計算層提供最基礎的計算,有線性計算瞧掺、卷積計算耕餐;
4.數據的計算都是以數組的形式參與計算凡傅;
5.計算圖層用來設計神經網絡的結構辟狈;
6.工作流層提供輕量級的框架調用
7.最后構造的深度學習網絡可以通過TensorBoard服務端可視化
技術架構
整體技術棧分為兩部分:
1.前端系統(tǒng):提供編程模型,負責構造計算圖夏跷;
2.后端系統(tǒng):提供運行時環(huán)境哼转,負責執(zhí)行計算圖。
組件交互
master節(jié)點給兩種類型的節(jié)點分發(fā)任務:
1./job:ps/task:0: 負責模型參數的存儲和更新
2./job:worker/task:0: 負責模型的訓練或推理
會話(Session)
客戶端使用會話來和TF系統(tǒng)交互槽华,一般的模式是壹蔓,建立會話,此時會生成一張空圖猫态;在會話中添加節(jié)點和邊佣蓉,形成一張圖,然后執(zhí)行亲雪。
實現(xiàn)(Implementation)
1.TF中最重要的Tensor被支持的非常全面勇凭,8bit到64bit, signed和unsigned义辕,IEEE float/double虾标,complex number等等。使用引用計數來保存tensor灌砖,當計數到0時璧函,tensor被回收傀蚌。
2.客戶端,用戶會使用蘸吓;與master和一些worker process交流
3.master善炫,用來與客戶端交互,同時調度任務库继;
4.worker process销部,工作節(jié)點,每個worker process可以訪問一到多個device制跟。
5.device舅桩,TF的計算核心,通過將device的類型雨膨、job名稱擂涛、在worker process中的索引將device命名×募牵可以通過注冊機制來添加新的device實現(xiàn)撒妈,每個device實現(xiàn)需要負責內存分配和管理調度TF系統(tǒng)所下達的核運算需求。
跨設備?通信
當兩個需要通信的op在不同的機器上時排监,就需要跨設備通信狰右,當它們需要通信時,TF會在它們之間的聯(lián)系中添加Send和Recv節(jié)點舆床,通過Send和Recv之間進行通信來達到op之間通信的效果棋蚌。如上所示。
梯度計算( Gradient Computation )
連接式的機器學習算法往往需要使用梯度下降法來求取參數挨队,TF通過擴展圖的方式實現(xiàn)了自動求導谷暮,TF做法如下:
對于每張計算圖,得到從輸入I到輸出C的路徑盛垦,并從C到I回溯湿弦,回溯過程中對于路徑上的每個節(jié)點A,添加另一個節(jié)點來計算A’來計算偏導腾夯,在計算偏導的過程中颊埃,A’不僅僅將上一層傳下來的反向導數作為輸入,還可能將A的輸入和輸出也作為其輸入蝶俱。
數據并行計算( Data Parallel Training)
通過數據并行的方式來提升模型的效率班利,比如,假如每次模型的mini-batch是1000個樣本跷乐,那么肥败,切成10份,每份100個,然后將模型復制10份馒稍,每份都將梯度傳到參數服務器上皿哨。
數據切分也分為同步和異步兩種方式,同步的切分是等待每個獨立的model傳上來的梯度都到齊后再進行更新纽谒,這樣和一個大的batch沒有區(qū)別证膨。異步的切分則是不用等待,每個獨立的模型的參數更新直接更新鼓黔。
模型并行訓練( Model Parallel Training)
還可以對模型進行切分央勒,讓模型的不同部分執(zhí)行在不同的設備上,這樣可以一個迭代的樣本可以在不同的設備上同時執(zhí)行澳化。如上圖所示的LSTM模型
TensorFlow Lite:端側機器學習框架
?TensorFlow Lite(TFLite)是一個輕量崔步、快速、跨平臺的專門針對移動和IoT場景的開源機器學習框架缎谷,是TensorFlow的一部分井濒,支持安卓、iOS列林、嵌入式Linux以及MCU等多個平臺部署.
TensorFlow Quantum: 量子機器學習框架
TensorFlow Quantum(TFQ)是用于混合量子經典機器學習的 Python 框架瑞你,主要致力于建模量子數據。
該框架允許量子算法研究人員和機器學習研究人員探索將量子計算與機器學習結合在一起希痴,訓練量子模型者甲。
TensorFlow Quantum 重點在于量子數據集和建立混合量子經典模型。它集成了許多量子算法和邏輯砌创,并提供與現(xiàn)有 TensorFlow API 兼容的量子計算原函數虏缸,以及高性能量子電路模擬器。
目前纺铭,TensorFlow Quantum 主要面向在經典量子電路模擬器上執(zhí)行量子電路寇钉。將來它能夠在實際量子處理器上執(zhí)行量子電路。
tensorflow項目應用
項目:Neural Style
這是最酷的TensorFlow GitHub項目之一舶赔。神經風格是將一張照片的風格遷移到另一張照片上的過程,同時保留相關的特張谦秧。簡單的來說竟纳,通過這個項目,你可以使用TensorFlow創(chuàng)建自己的Prisma應用程序疚鲤。
如上圖所示锥累,把梵高畫作的風格,遷移到一張獅子的照片上集歇,就得到一個星空風格的獅子照片桶略,這就是所謂的風格遷移。下面再展示一組這個項目的風格遷移,能把這張獅子的照片际歼,變成哪些非常有趣的效果惶翻。
這個項目在風格遷移的同時,還能對圖像進行語義分割鹅心。進而實現(xiàn)對內容的前景吕粗、背景進行不同的風格遷移處理。這個過程如下圖所示:
另外這個算法還能適用于視頻處理旭愧。
上述圖片處理使用的軟硬件如下:
CPU: Intel Core i7-6800K@3.4GHz×12
GPU: NVIDIA GeForce GTX 1080/PCIe/SSE2
OS: Linux Ubuntu 16.04.1 LTS 64-bit
CUDA: 8.0
python: 2.7.12
tensorflow: 0.10.0rc
opencv: 2.4.9.1
GitHub地址如下:
https://github.com/cysmith/neural-style-tf
項目:Mozilla Deep Speech
這個GitHub項目使用TensorFlow將語音轉換為文本颅筋。語音轉文本是一個熱門的機器學習領域,然而各地的人們有著不同的口音输枯,這也是一個難以解決的問題议泵。不過仍然可以通過深度學習實現(xiàn)非常不錯的準確性。
其實這個項目桃熄,是一個基于百度DeepSpeech架構的TensorFlow實現(xiàn)篙悯。換句話說,這個項目是百度的內核剩辟,Google的外貌眠冈。
百度的相關論文地址在此:
https://arxiv.org/abs/1412.5567
DeepSpeech是吳恩達帶領百度團隊研發(fā)出的成果,最早發(fā)布于2014年底缎讼。今年初收夸,百度基于DeepSpeech2,開發(fā)出一款名為SwiftScribe的應用(swiftscribe.ai)血崭,可以把語音文件更為快速卧惜、便捷的轉換為文字。目前只限于英文夹纫。
回到這個項目咽瓷。
所需軟件環(huán)境如下:
Git Large File Storage
TensorFlow 1.0 or 1.1
SciPy
PyXDG
python_speech_features (nb: deprecated)
python sox
pandas
DeepSpeech native client libraries
如果你有至少8GB顯存的英偉達GPU,強烈建議安裝支持GPU的TensorFlow舰讹,因為使用GPU的訓練比CPU快得多茅姜。
GitHub地址如下:
https://github.com/mozilla/DeepSpeech
項目:句子分類
句子分類就是識別句子類型的過程。例如月匣,對于“食物非常糟糕”這個句子钻洒,你可能希望將其分類為正面句子或負面句子,這也被稱為情緒分析锄开。這個問題的難點在于:句子結構帶來的復雜性素标。
利用卷積神經網絡,我們可以嘗試構建一個強大的文本分類器萍悴。
這里介紹的項目头遭,是Yoon Kim論文《Convolutional Neural Networks for Sentence Classification(使用卷積神經網絡進行句子分類)》的簡單實現(xiàn)寓免。這個論文的地址如下:
https://arxiv.org/abs/1408.5882
通過一個簡單的CNN卷積神經網絡,只進行很少的超參數調整和靜態(tài)矢量计维,就可以得到出色的句子分類結果袜香。
所需軟件環(huán)境如下:
Python 3
Tensorflow > 0.12
Numpy
GitHub地址如下:
https://github.com/dennybritz/cnn-text-classification-tf
項目:圖像分類/物體識別
圖像分類,也就是訓練系統(tǒng)識別貓貓狗狗享潜,或者車道困鸥、海灘、天際線等場景剑按。計算機視覺是一個范圍巨大的領域疾就,從面部識別到情感識別,甚至可以進行視覺氣體泄漏檢測艺蝴。雖然實現(xiàn)流程各異猬腰,但底層系統(tǒng)是相通的。
所以作者創(chuàng)建了一個TensorFlow GitHub庫猜敢,其中包括兩個相互關聯(lián)的部分姑荷。第一部分:能夠識別1000個對象的TensorFlow圖像分類器。第二部分:創(chuàng)建并訓練一個全新的圖像分類器缩擂。
我們先來看看第一部分鼠冕,貓狗識別動態(tài)圖。
Google的TensorFlow圖像識別系統(tǒng)是目前最準確的圖像分類軟件胯盯。所謂圖像識別懈费,就是對圖片中的內容進行識別,然而這并非對任意圖片都能識別博脑。
只有被訓練過的對象憎乙,系統(tǒng)才能識別。例如叉趣,我們用三個類型訓練分類器:貓泞边、狗和牛。三個分類器只能識別相應類別中的一個疗杉。如果給出一張駱駝的圖片會怎樣阵谚?圖片仍會通過一個分類器,但是置信率會非常的低乡数。
項目:基于TensorFlow.js實現(xiàn)web版你畫我猜
代碼:https://github.com/zaidalyafeai/zaidalyafeai.github.io/tree/master/sketcher
Demo:https://zaidalyafeai.github.io/sketcher/
Google Colab notebook:https://colab.research.google.com/github/zaidalyafeai/zaidalyafeai.github.io/blob/master/sketcher/Sketcher.ipynb