關(guān)于我們
書單推薦
新書推薦
|
面向機(jī)器智能的TensorFlow實(shí)踐
本書共有4部分,分9章。第壹部分對TensorFlow的歷史脈絡(luò)進(jìn)行了簡要的梳理,介紹在安裝TensorFlow時應(yīng)當(dāng)考慮的因素,并給出了詳細(xì)的TensorFlow安裝指南;第二部分深入介紹TensorFlowAPI的基礎(chǔ)知識;第三部分關(guān)注一種更為復(fù)雜的深度學(xué)習(xí)模型,首先對模型進(jìn)行描述,然后介紹如何用可視化的數(shù)據(jù)流圖表示所要創(chuàng)建的模型,以及如何利用TensorFlow有效地構(gòu)建這些模型;本書的后一部分探討TensorFlowAPI中新推出的特性,內(nèi)容包括如何準(zhǔn)備用于部署的模型、一些有用的編程模式,以及其他精選主題。
TensorFlow入門權(quán)*指南
谷歌研發(fā)一線工程師參與撰寫,生動講解TensorFlow底層原理
The Translator's Words
譯 者 序
我們正處在一個激動人心的時代,深度學(xué)習(xí)作為近年來最具突破性的技術(shù)之一,極大地推動了人工智能領(lǐng)域的研究進(jìn)程,并迅速滲透各行各業(yè),同時帶動了一大批如家庭服務(wù)機(jī)器人、自動駕駛這樣的新興產(chǎn)業(yè)。不夸張地說,深度學(xué)習(xí)技術(shù)正在深刻地影響著人們的工作、生活和思維方式。
為了幫助人們更高效地從事深度學(xué)習(xí)研究和應(yīng)用,并積極分享其研究成果,優(yōu)秀的開源深度學(xué)習(xí)框架如雨后春筍般不斷涌現(xiàn)。作為深度學(xué)習(xí)領(lǐng)域巨擘之一的Google也在2015年11月將自己的第二代分布式機(jī)器學(xué)習(xí)系統(tǒng)TensorFlow開源。雖然發(fā)布時間較晚,但憑借Google在業(yè)內(nèi)廣泛而巨大的影響力以及頂尖的人工智能研究水平,其代碼的簡潔性、部署的便利性,以及在學(xué)術(shù)研究和產(chǎn)品研發(fā)兩端取得的良好平衡,在極短的時間內(nèi)便從眾多優(yōu)秀的深度學(xué)習(xí)框架中脫穎而出,獲得了廣大開發(fā)者的強(qiáng)烈關(guān)注。自公開發(fā)布以來,TensorFlow始終保持著兼收并蓄的態(tài)勢,不斷地從其他優(yōu)秀開源框架中汲取優(yōu)秀特性,在廣大研究和開發(fā)人員的強(qiáng)力推動下,不斷快速迭代并大幅提升代碼的效率,平均每周的代碼更新量都超過了萬行,所形成的社區(qū)開創(chuàng)了空前的活躍度。完全可以預(yù)見,TensorFlow將長期位列一流開源框架的行列。
雖然TensorFlow的優(yōu)點(diǎn)數(shù)不勝數(shù),但其“不足”也較為突出,那就是其接口過于復(fù)雜,對初學(xué)者的編程技能和知識水平要求偏高,學(xué)習(xí)曲線過陡。本書的問世在一定程度上緩解了這個矛盾。本書的幾位作者都來自Google的研發(fā)一線,他們用自己的寶貴經(jīng)驗(yàn),結(jié)合眾多高質(zhì)量的代碼,生動講解了TensorFlow的底層原理,并從實(shí)戰(zhàn)角度介紹了如何將兩種常見模型——深度卷積網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)應(yīng)用到圖像理解和自然語言處理的典型任務(wù)中。難能可貴的是,他們還介紹了在模型部署和編程中可用的諸多實(shí)用技巧?傊,本書非常適合TensorFlow的入門學(xué)習(xí)。
需要說明的是,這并不是一本機(jī)器學(xué)習(xí)理論或深度學(xué)習(xí)的入門讀物,閱讀本書需要讀者對經(jīng)典機(jī)器學(xué)習(xí)理論和算法、深度卷積網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)的基本原理有初步的了解,并對Python編程和常用的Python庫(如NumPy和matplotlib)較為熟悉。另外,本書的代碼是基于TensorFlow 0.8版的,譯者對0.9版所做的接口變動以“譯者注”的形式做了部分說明,并對原書中的一些錯誤進(jìn)行了訂正。盡管TensorFlow 1.0版已經(jīng)正式發(fā)布,接口升級相比以往任何一版都要更多,但筆者認(rèn)為讀者朋友大可不必過于擔(dān)憂。只要清楚地掌握了TensorFlow的基本原理和Python編程,并勤于借助互聯(lián)網(wǎng),相信接口問題都可迎刃而解。同時,為方便廣大讀者的學(xué)習(xí),原書作者和譯者也會抽時間對本書中的實(shí)例代碼按照TensorFlow最新版本進(jìn)行升級,請大家關(guān)注原出版社和機(jī)械工業(yè)出版社相關(guān)主題的后續(xù)圖書。
感謝機(jī)械工業(yè)出版社張夢玲編輯在本書翻譯過程中給予的諸多幫助,也感謝家人對我無微不至的關(guān)心。
深入理解深度學(xué)習(xí),從了解優(yōu)秀的開源框架開始,愿讀者朋友們的TensorFlow學(xué)習(xí)之旅一帆風(fēng)順!
段菲
2017年3月3日
PREFACE
前 言
歡迎
自2015年11月TensorFlow第一個開源版本發(fā)布以來,它便迅速躋身于最激動人心的機(jī)器學(xué)習(xí)庫的行列,并在科研、產(chǎn)品和教育等領(lǐng)域正在得到日益廣泛的應(yīng)用。這個庫也在不斷地得到改進(jìn)、充實(shí)和優(yōu)化。與此同時,TensorFlow社區(qū)正以驚人的速度發(fā)展壯大。無論你是新手還是有經(jīng)驗(yàn)的用戶,筆者都希望通過本書幫助你提升使用TensorFlow的能力,使你自如地充分利用這個功能強(qiáng)大的開源庫。
本書的內(nèi)容編排
第一部分:開啟TensorFlow之旅
本書第一部分將幫助讀者做好使用TensorFlow的準(zhǔn)備。第1章為引言,對TensorFlow的歷史脈絡(luò)進(jìn)行了簡要的梳理,并對TensorFlow的設(shè)計(jì)模式以及選擇TensorFlow作為深度學(xué)習(xí)庫的優(yōu)勢和面臨的挑戰(zhàn)進(jìn)行了討論。
引言之后的第2章將介紹安裝TensorFlow時應(yīng)當(dāng)考慮的因素,并給出了詳細(xì)的TensorFlow安裝指南,即如何從二進(jìn)制安裝包安裝和從源碼構(gòu)建TensorFlow。
第二部分:TensorFlow與機(jī)器學(xué)習(xí)基礎(chǔ)
從第3章開始,進(jìn)入本書第二部分。在TensorFlow安裝完畢后,第3章將深入介紹TensorFlow API的基礎(chǔ)知識,而不會涉及過多的機(jī)器學(xué)習(xí)概念。這樣做是為了將“學(xué)習(xí)TensorFlow”和“學(xué)習(xí)如何利用TensorFlow從事機(jī)器學(xué)習(xí)相關(guān)工作”區(qū)分開來。第3章將對TensorFlow API中許多重要的部分進(jìn)行深入剖析。此外,還將演示如何用可視化的數(shù)據(jù)流圖表示模型,并將其轉(zhuǎn)化為TensorFlow代碼,以及如何利用TensorBoard驗(yàn)證數(shù)據(jù)流圖是否被正確建模。
介紹完TensorFlow API的核心概念之后,便進(jìn)入第4章。這一章將利用TensorFlow實(shí)現(xiàn)一些簡單的機(jī)器學(xué)習(xí)模型,如線性回歸、對數(shù)幾率回歸(logistic regression)和聚類模型。
第三部分:用TensorFlow實(shí)現(xiàn)更高級的深度模型
第三部分由兩章構(gòu)成,每章都只關(guān)注一種更為復(fù)雜的深度學(xué)習(xí)模型。每章首先對模型進(jìn)行描述,然后介紹如何用可視化的數(shù)據(jù)流圖表示所要創(chuàng)建的模型。這兩章還將討論為什么要以特定方式構(gòu)建這些模型,并對所涉及的數(shù)學(xué)難點(diǎn)進(jìn)行講解,之后再介紹如何利用TensorFlow有效地構(gòu)建這些模型。
所要研究的第一個模型是卷積神經(jīng)網(wǎng)絡(luò)(CNN),對應(yīng)于第5章。該章會介紹如何使用圖像數(shù)據(jù)訓(xùn)練TensorFlow模型,并對卷積的數(shù)學(xué)原理和使用目的展開討論,同時還將介紹如何將圖像裸數(shù)據(jù)轉(zhuǎn)化為一種與TensorFlow兼容的格式,以及如何對最終的輸出進(jìn)行測試。
第6章將探討如何使用TensorFlow正確地構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型。通過各種自然語言處理(NLP)任務(wù),讀者將了解如何利用長短時記憶網(wǎng)絡(luò)(LSTM)以及如何將預(yù)訓(xùn)練的詞向量包含到模型中。
第四部分:其他提示、技術(shù)與特性
本書最后一部分將探討TensorFlow API中最新推出的特性,內(nèi)容包括如何準(zhǔn)備用于部署的模型、一些有用的編程模式,以及其他精選主題。
其他機(jī)器學(xué)習(xí)庫
TensorFlow并非唯一可用的開源機(jī)器學(xué)習(xí)庫。下面列出一份可用于深度學(xué)習(xí)的簡短開源庫清單:
Caffe專注于卷積神經(jīng)網(wǎng)絡(luò)和圖像處理,使用C++語言編寫。
Chainer是另一個靈活的機(jī)器學(xué)習(xí)Python庫,支持單機(jī)多GPU運(yùn)算。
CNTK是微軟公司發(fā)布的首個開源機(jī)器學(xué)習(xí)庫,它擁有自己的模型定義語言,支持聲明式的分布式模型構(gòu)建。
Deeplearning4j是一個專門針對神經(jīng)網(wǎng)絡(luò)的Java庫,它易于與Spark、Hadoop和其他基于Java的分布式軟件集成,具有良好的可伸縮性。
Nervana Neon是一個高效的Python機(jī)器學(xué)習(xí)庫,支持單機(jī)多GPU運(yùn)算。
Theano是一個極為靈活的Python機(jī)器學(xué)習(xí)庫,因其出眾的用戶友好性以及可以用異常簡單的方式定義復(fù)雜模型等特點(diǎn),在科研領(lǐng)域深受歡迎。TensorFlow的API與Theano API最為相似。
Torch是一個專注于GPU實(shí)現(xiàn)的機(jī)器學(xué)習(xí)庫,它是用Lua語言編寫的,并由來自若干家大公司的研究團(tuán)隊(duì)提供支持。
限于篇幅,本書不打算對上述這些庫的優(yōu)缺點(diǎn)展開深入討論,但如果有時間,非常值得深入展開。TensorFlow的作者在進(jìn)行框架設(shè)計(jì)時,便是從當(dāng)中的幾個庫汲取了靈感。
先修知識
雖然本書主要關(guān)注TensorFlow API,但筆者希望讀者已經(jīng)熟悉大量數(shù)學(xué)和編程概念,包括:
微積分(一元和多元)
矩陣代數(shù)(尤其是矩陣乘法)
基本的編程原理
機(jī)器學(xué)習(xí)的基本概念
此外,讀者若能夠掌握下列知識,則將從本書中獲得更大的收獲:
擁有Python編程及模塊組織的經(jīng)驗(yàn)
擁有NumPy庫的使用經(jīng)驗(yàn)
擁有matplotlib庫的使用經(jīng)驗(yàn)
掌握機(jī)器學(xué)習(xí)中更高級的概念,尤其是前饋神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)
在適宜的時候,筆者會通過一些提示信息幫助讀者重新熟悉那些為充分理解相關(guān)數(shù)學(xué)和Python概念所必需的概念。
預(yù)期的收獲
通過閱讀本書,讀者將掌握以下內(nèi)容:
TensorFlow的核心API
TensorFlow的工作流:數(shù)據(jù)流圖的定義和數(shù)據(jù)流圖的執(zhí)行
如何在各種設(shè)備上安裝TensorFlow
組織代碼和項(xiàng)目的最佳實(shí)踐
如何用TensorFlow創(chuàng)建核心機(jī)器學(xué)習(xí)模型
如何用TensorFlow實(shí)現(xiàn)RNN和CNN
如何用TensorFlow Serving部署代碼
利用TensorBoard分析模型的基礎(chǔ)知識
在學(xué)習(xí)完本書之后,如果讀者想對TensorFlow獲得更多了解,可參考下列資源:
TensorFlow官網(wǎng) 其中包含最新的文檔、API和入門材料。
TensorFlow Github代碼庫 在此,可對TensorFlow的開源實(shí)現(xiàn)做出貢獻(xiàn),并直接對源代碼進(jìn)行審查。
官方發(fā)布的用TensorFlow實(shí)現(xiàn)的機(jī)器學(xué)習(xí)模型 可原封不動地使用這些模型,也可稍加調(diào)整以適合自己的設(shè)計(jì)目的。
谷歌研究院的博客(Google Research Blog) 提供了來自谷歌的有關(guān)TensorFlow的應(yīng)用和更新的最新消息。
Kaggle 獲取公開數(shù)據(jù)集并與其他從事數(shù)據(jù)分析工作的人開展競賽的絕佳網(wǎng)站。
Data.gov 美國政府的門戶網(wǎng)站,從中可找到全美國的公開數(shù)據(jù)集。
至此,“動員演講”已經(jīng)結(jié)束,現(xiàn)在讓我們開啟本書的學(xué)習(xí)之旅吧!
山姆·亞伯拉罕:數(shù)據(jù)科學(xué)家、工程師,富有經(jīng)驗(yàn)的TensorFlow貢獻(xiàn)者。
丹尼亞爾·哈夫納:谷歌軟件工程師
埃里克·厄威特:高級軟件工程師
阿里爾·斯卡爾皮內(nèi)里:團(tuán)隊(duì)負(fù)責(zé)人,高級Java開發(fā)者
段菲,清華大學(xué)信號與信息處理專業(yè)博士,前三星電子中國研究院高級研究員,現(xiàn)為英特爾中國研究院高級研究員。研究方向是深度學(xué)習(xí)、計(jì)算機(jī)視覺、數(shù)據(jù)可視化。參與翻譯過《機(jī)器學(xué)習(xí)》《機(jī)器學(xué)習(xí)實(shí)踐:測試驅(qū)動的開發(fā)方法》《DirectX103D游戲編程深度探索》等多本圖書。
CONTENTS
目錄
譯者序
前言
第一部分 開啟TensorFlow之旅
第1章 引言2
1.1 無處不在的數(shù)據(jù)2
1.2 深度學(xué)習(xí)2
1.3 TensorFlow:一個現(xiàn)代的機(jī)器學(xué)習(xí)庫3
1.4 TensorFlow:技術(shù)概要3
1.5 何為TensorFlow4
1.5.1 解讀來自官網(wǎng)的單句描述4
1.5.2 單句描述未體現(xiàn)的內(nèi)容6
1.6 何時使用TensorFlow7
1.7 TensorFlow的優(yōu)勢8
1.8 使用TensorFlow所面臨的挑戰(zhàn)9
1.9 高歌猛進(jìn)9
第2章 安裝TensorFlow10
2.1 選擇安裝環(huán)境10
2.2 Jupyter Notebook與matplotlib12
2.3 創(chuàng)建Virtualenv環(huán)境12
2.4 TensorFlow的簡易安裝13
2.5 源碼構(gòu)建及安裝實(shí)例:在64位Ubuntu Linux上安裝GPU版TensorFlow14
2.5.1 安裝依賴庫14
2.5.2 安裝Bazel15
2.5.3 安裝CUDA軟件(僅限NVIDIA GPU)16
2.5.4 從源碼構(gòu)建和安裝TensorFlow18
2.6 安裝Jupyter Notebook20
2.7 安裝matplotlib20
2.8 測試TensorFlow、Jupyter Notebook及matplotlib21
2.9 本章小結(jié)23
第二部分 TensorFlow與機(jī)器學(xué)習(xí)基礎(chǔ)
第3章 TensorFlow基礎(chǔ)26
3.1 數(shù)據(jù)流圖簡介26
3.1.1 數(shù)據(jù)流圖基礎(chǔ)26
3.1.2 節(jié)點(diǎn)的依賴關(guān)系29
3.2 在TensorFlow中定義數(shù)據(jù)流圖33
3.2.1 構(gòu)建第一個TensorFlow數(shù)據(jù)流圖33
3.2.2 張量思維39
3.2.3 張量的形狀43
3.2.4 TensorFlow的Operation44
3.2.5 TensorFlow的Graph對象46
3.2.6 TensorFlow Session48
3.2.7 利用占位節(jié)點(diǎn)添加輸入52
3.2.8 Variable對象53
3.3 通過名稱作用域組織數(shù)據(jù)流圖56
3.4 練習(xí):綜合運(yùn)用各種組件61
3.4.1 構(gòu)建數(shù)據(jù)流圖63
3.4.2 運(yùn)行數(shù)據(jù)流圖66
3.5 本章小結(jié)71
第4章 機(jī)器學(xué)習(xí)基礎(chǔ)72
4.1 有監(jiān)督學(xué)習(xí)簡介72
4.2 保存訓(xùn)練檢查點(diǎn)74
4.3 線性回歸76
4.4 對數(shù)幾率回歸78
4.5 softmax分類83
4.6 多層神經(jīng)網(wǎng)絡(luò)85
4.7 梯度下降法與誤差反向傳播算法88
第三部分 用TensorFlow實(shí)現(xiàn)更高級的深度模型
第5章 目標(biāo)識別與分類96
5.1 卷積神經(jīng)網(wǎng)絡(luò)97
5.2 卷積100
5.2.1 輸入和卷積核100
5.2.2 跨度102
5.2.3 邊界填充104
5.2.4 數(shù)據(jù)格式104
5.2.5 深入探討卷積核105
5.3 常見層107
5.3.1 卷積層108
5.3.2 激活函數(shù)108
5.3.3 池化層111
5.3.4 歸一化113
5.3.5 高級層114
5.4 圖像與TensorFlow116
5.4.1 加載圖像116
5.4.2 圖像格式117
5.4.3 圖像操作121
5.4.4 顏色127
5.5 CNN的實(shí)現(xiàn)129
5.5.1 Stanford Dogs數(shù)據(jù)集129
5.5.2 將圖像轉(zhuǎn)為TFRecord文件130
5.5.3 加載圖像133
5.5.4 模型134
5.5.5 訓(xùn)練136
5.5.6 用TensorBoard調(diào)試濾波器137
5.6 本章小結(jié)139
第6章 循環(huán)神經(jīng)網(wǎng)絡(luò)與自然語言處理140
6.1 循環(huán)神經(jīng)網(wǎng)絡(luò)簡介140
6.1.1 時序的世界140
6.1.2 近似任意程序141
6.1.3 隨時間反向傳播142
6.1.4 序列的編碼和解碼143
6.1.5 實(shí)現(xiàn)第一個循環(huán)神經(jīng)網(wǎng)絡(luò)145
6.1.6 梯度消失與梯度爆炸145
6.1.7 長短時記憶網(wǎng)絡(luò)147
6.1.8 RNN結(jié)構(gòu)的變種148
6.2 詞向量嵌入149
6.2.1 準(zhǔn)備維基百科語料庫151
6.2.2 模型結(jié)構(gòu)155
6.2.3 噪聲對比分類器156
6.2.4 訓(xùn)練模型156
6.3 序列分類157
6.3.1 Imdb影評數(shù)據(jù)集158
6.3.2 使用詞向量嵌入159
6.3.3 序列標(biāo)注模型159
6.3.4 來自最后相關(guān)活性值的softmax層161
6.3.5 梯度裁剪162
6.3.6 訓(xùn)練模型163
6.4 序列標(biāo)注164
6.4.1 OCR數(shù)據(jù)集164
6.4.2 時間步之間共享的soft-max層166
6.4.3 訓(xùn)練模型169
6.4.4 雙向RNN171
6.5 預(yù)測編碼174
6.5.1 字符級語言建模174
6.5.2 ArXiv摘要API175
6.5.3 數(shù)據(jù)預(yù)處理177
6.5.4 預(yù)測編碼模型178
6.5.5 訓(xùn)練模型182
6.5.6 生成相似序列185
6.6 本章小結(jié)188
第四部分 其他提示、技術(shù)與特性
第7章 產(chǎn)品環(huán)境中模型的部署190
7.1 搭建TensorFlow服務(wù)開發(fā)環(huán)境190
7.1.1 Docker鏡像190
7.1.2 Bazel工作區(qū)191
7.2 導(dǎo)出訓(xùn)練好的模型192
7.3 定義服務(wù)器接口195
7.4 實(shí)現(xiàn)推斷服務(wù)器197
7.5 客戶端應(yīng)用201
7.6 產(chǎn)品準(zhǔn)備203
7.7 本章小結(jié)203
第8章 輔助函數(shù)、代碼結(jié)構(gòu)和類204
8.1 確保目錄結(jié)構(gòu)存在204
8.2 下載函數(shù)204
8.3 磁盤緩存修飾器205
8.4 屬性字典206
8.5 惰性屬性修飾器207
8.6 覆蓋數(shù)據(jù)流圖修飾器209
第9章 結(jié)語:其他資源212
你還可能感興趣
我要評論
|