為什么要寫這本書
機(jī)器學(xué)習(xí)、云計算與移動技術(shù)的興起為計算機(jī)科學(xué)領(lǐng)域注入了前所未有的活力,而海量數(shù)據(jù)時代的來臨更是為機(jī)器學(xué)習(xí)技術(shù)帶來了新的發(fā)展契機(jī)。我們可以看到,越來越多的企業(yè)和研發(fā)機(jī)構(gòu)開始在自己的產(chǎn)品當(dāng)中加入機(jī)器智能,曾經(jīng)僅僅是為了錦上添花而使用的機(jī)器學(xué)習(xí)應(yīng)用,如今搖身一變,成了現(xiàn)代軟件產(chǎn)品或服務(wù)的核心競爭力。通過機(jī)器學(xué)習(xí)技術(shù),軟件或服務(wù)的功能和體驗得到了質(zhì)的提升。比如,我們甚至可以通過啟發(fā)式引擎智能地預(yù)測并調(diào)節(jié)云計算分布式系統(tǒng)的節(jié)點(diǎn)壓力,以此改善服務(wù)的彈性和穩(wěn)定性,這是多么美妙。而對移動平臺來說,越來越多的移動終端、邊緣計算設(shè)備和App開始引入人工智能技術(shù),而且對預(yù)測實時性要求高的環(huán)境也越來越依賴于離線實時機(jī)器學(xué)習(xí),另外移動技術(shù)的普及也讓邊緣計算支持機(jī)器智能成為可能。
然而,開發(fā)成熟完善的機(jī)器學(xué)習(xí)系統(tǒng)并不簡單。不同于傳統(tǒng)計算機(jī)軟件系統(tǒng)開發(fā),研發(fā)機(jī)器學(xué)習(xí)系統(tǒng)不僅需要掌握扎實的軟件開發(fā)技術(shù)、算法原理,還需要掌握紛繁復(fù)雜的數(shù)據(jù)處理原理和實踐方法。此外,機(jī)器學(xué)習(xí)系統(tǒng)的實際載體多種多樣。一個典型的機(jī)器學(xué)習(xí)系統(tǒng)可以是運(yùn)行在云計算平臺(比如Amazon AWS)之上的實例,通過API調(diào)用的方式提供預(yù)測服務(wù)。另一種情況是,集中式提供機(jī)器學(xué)習(xí)服務(wù)固然不錯,但離線機(jī)器學(xué)習(xí)計算是一項重大補(bǔ)充。在對實時性要求極為苛刻的生產(chǎn)環(huán)境中,實時的本地機(jī)器學(xué)習(xí)預(yù)測技術(shù)就顯得尤為關(guān)鍵,如何在確保準(zhǔn)確率的前提下,提升整體計算效率、降低系統(tǒng)功耗成為需要攻克的難題。在移動技術(shù)、邊緣計算等技術(shù)突飛猛進(jìn)的當(dāng)下,研發(fā)高可靠、高效率以及低功耗的移動平臺機(jī)器學(xué)習(xí)系統(tǒng)擁有廣闊的發(fā)展愿景和市場,這既為我們創(chuàng)造了新的機(jī)遇,也使研發(fā)面臨巨大的挑戰(zhàn)。這是筆者撰寫本書的原動力。本書著眼于移動平臺之上的深度神經(jīng)網(wǎng)絡(luò)系統(tǒng)的研發(fā)和實戰(zhàn),從理論開始,抽絲剝繭地闡述、歸納和總結(jié)研發(fā)高性能計算系統(tǒng)的各個方面,同時輔以實戰(zhàn),帶領(lǐng)讀者一起掌握實際的工程落地方法。
未來已至,我們需要做好準(zhǔn)備!
本書特色
本書是一本由淺入深詳細(xì)講解研發(fā)高性能移動平臺深度學(xué)習(xí)系統(tǒng)的編程實戰(zhàn)書。本書從基礎(chǔ)機(jī)器學(xué)習(xí)知識開始講起,涵蓋設(shè)計和使用高性能分布式實時處理系統(tǒng),移動平臺編程,前向引擎優(yōu)化和裁剪,實際的代碼編寫,最終實現(xiàn)一整套針對移動領(lǐng)域開發(fā)的完整機(jī)器學(xué)習(xí)解決方案。在本書中,我們將介紹一套以C 編寫的高性能分布式實時處理系統(tǒng)Hurricane及其使用方法,供數(shù)據(jù)收集和預(yù)處理使用。在此基礎(chǔ)上,我們會深入剖析機(jī)器學(xué)習(xí)原理和深度神經(jīng)網(wǎng)絡(luò)概念,而概念講解伴隨而來的是編程實戰(zhàn),本書主要使用Python來講解基礎(chǔ)算法,驗證設(shè)想。
另外,本書采用循序漸進(jìn)的方式講解理論知識,從基礎(chǔ)知識入手到艱澀的優(yōu)化算法。相比于C/C ,Python是一門易于上手并實驗友好的膠水語言,因此在講解各類概念與算法時,我們會使用Python來驗證設(shè)想。從神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)篇章開始,為了給工程開發(fā)學(xué)習(xí)打下堅實的基礎(chǔ),本書除了使用Python代碼驗證設(shè)想外,還使用C/C 來實現(xiàn)產(chǎn)品級的代碼。
由于本書的主題是講解如何開發(fā)實現(xiàn)高性能的移動平臺深度學(xué)習(xí)系統(tǒng),因此會花費(fèi)大量篇幅講解各種旨在提升算法速度和減小模型的小的算法與技術(shù)手段,從輕量級網(wǎng)絡(luò)等算法模型層面改良到Neon指令集應(yīng)用、權(quán)重稀疏化、半精度、權(quán)重量化等優(yōu)化算法與技術(shù)實現(xiàn),最終完成適用于移動平臺的深度學(xué)習(xí)引擎性能增強(qiáng)與模型裁剪。為了完成完整的深度學(xué)習(xí)系統(tǒng),我們除了要掌握基本原理外還需要掌握各類實現(xiàn)應(yīng)用所需的工程技術(shù)。例如,在第三篇講解與完成整個系統(tǒng)相關(guān)的所有技術(shù)時,還介紹了如何爬取訓(xùn)練用的圖像數(shù)據(jù)、清理訓(xùn)練數(shù)據(jù)、編寫訓(xùn)練代碼等內(nèi)容,并以TensorFlow Lite為例,講解移動平臺深度學(xué)習(xí)引擎框架的搭建方法,卷積層、池化層和全連接層實現(xiàn)與iOS(包括iPadOS)、Android等平臺的互操作實現(xiàn)與封裝方案,最終完成可以在iOS與Android上實際運(yùn)行的深度學(xué)習(xí)系統(tǒng)。
期待讀者能從本書中學(xué)到新的知識,以便對深度學(xué)習(xí)與移動平臺系統(tǒng)開發(fā)有更加深入的認(rèn)識,了解如何構(gòu)建一個高性能移動平臺深度學(xué)習(xí)系統(tǒng)。
如何閱讀本書
本書從最基本的機(jī)器學(xué)習(xí)基礎(chǔ)概念和原理開始,逐步引入研發(fā)高性能移動平臺機(jī)器學(xué)習(xí)系統(tǒng)所需要的方方面面,抽絲剝繭地把有關(guān)機(jī)器學(xué)習(xí)和框架的問題娓娓道來。
第一篇為深度學(xué)習(xí)基礎(chǔ),包含第1~4章。
第1章 介紹機(jī)器學(xué)習(xí)的一些基本概念、學(xué)習(xí)方法和開發(fā)機(jī)器學(xué)習(xí)系統(tǒng)所需的重要知識點(diǎn),由此引出開發(fā)移動平臺機(jī)器學(xué)習(xí)系統(tǒng)的主題,帶領(lǐng)讀者進(jìn)入移動平臺機(jī)器學(xué)習(xí)實戰(zhàn)領(lǐng)域。
第2章 進(jìn)一步介紹機(jī)器學(xué)習(xí)方法、原理和算法,為理解人工神經(jīng)網(wǎng)絡(luò)打下基礎(chǔ)。
第3章 介紹人工神經(jīng)網(wǎng)絡(luò)、基于無監(jiān)督學(xué)習(xí)的稀疏自編碼器以及相應(yīng)的數(shù)據(jù)預(yù)處理實戰(zhàn)。
第4章 介紹深度網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的概念以及相應(yīng)的編程實戰(zhàn),作為移動平臺實現(xiàn)算法的基石。
第二篇為移動平臺深度學(xué)習(xí)基礎(chǔ),包含第5~6章。
第5章 介紹移動平臺深度學(xué)習(xí)開發(fā)基礎(chǔ),聚焦于ARM指令集加速技術(shù)。
第6章 介紹移動平臺輕量級網(wǎng)絡(luò)的實現(xiàn)原理和編程實戰(zhàn)。
第三篇為深入理解深度學(xué)習(xí),包含第7~8章。
第7章 介紹數(shù)據(jù)預(yù)處理原理、方法,及基于高性能實時處理系統(tǒng)開發(fā)的PCA產(chǎn)品級數(shù)據(jù)預(yù)處理解決方案。
第8章 介紹模式識別和物體識別的基本概念以及經(jīng)典算法,并通過深度神經(jīng)網(wǎng)絡(luò)編程實戰(zhàn)實現(xiàn)AlexNet、Faster R-CNN和Retina Net。本書最后實現(xiàn)的移動平臺示例主要是圖像分類,因此本章的作用是先介紹一下前導(dǎo)知識。
第四篇為深入理解移動平臺深度學(xué)習(xí),包含第9~12章。
第9章 深入介紹移動平臺性能優(yōu)化主題,在移動平臺對深度網(wǎng)絡(luò)的速度進(jìn)行優(yōu)化,使移動平臺系統(tǒng)能夠高速低功耗使用模型的具體策略和方法。
第10章 介紹采集、訓(xùn)練數(shù)據(jù)的方法和編程實戰(zhàn),并通過TensorFlow完成訓(xùn)練與測試,最后完成整個數(shù)據(jù)采集和訓(xùn)練平臺,為開發(fā)移動平臺圖像分類系統(tǒng)建立基礎(chǔ)。
第11章 介紹了TensorFlow Lite的代碼體系、構(gòu)建原理、集成方法以及核心代碼與裁剪分析,并介紹模型處理工具,完成移動平臺系統(tǒng)集成。
第12章 介紹流行的移動平臺機(jī)器學(xué)習(xí)框架和接口并輔以實戰(zhàn),最后總結(jié)并展望未來。
閱讀前提
本書采用Ubuntu、Debian以及Windows操作系統(tǒng)作為基本的開發(fā)環(huán)境。此外,本書不會介紹基礎(chǔ)的編程概念和理論。我們假定讀者在閱讀本書之前已經(jīng)具備基本的編程技術(shù)以及一定的Python、C/C 編程經(jīng)驗(最后一章還需要一些Swift和Java的基本語法知識)。除此之外,數(shù)據(jù)對深度學(xué)習(xí)來說至關(guān)重要,讀者還應(yīng)該具備基本的實時數(shù)據(jù)處理方法和實踐經(jīng)驗。建議讀者先閱讀《Python程序設(shè)計》和《C 編程思想》以了解編程的基本概念,然后閱讀《高級C/C 編譯技術(shù)》和《分布式實時處理系統(tǒng):原理、架構(gòu)與實現(xiàn)》來進(jìn)行提高。
本書排版約定
在本書中,讀者會發(fā)現(xiàn)針對不同信息類型的文本樣式。下面是這些樣式的示例和解釋。
所有命令行輸入和輸出如下所示:
mkdir mobile-ml-learning
cd mobile-ml-learning
代碼清單通常以以下格式展現(xiàn):
2 #include
3
4 int main()
5 {
6 std::cout << "Hello mobile ML_world!!" << std::endl;
7
8 return 0;
9 }
在正文當(dāng)中,我們可能會用以下方式拓展所講解的內(nèi)容:
這里是相關(guān)提示的文字。
讀者對象
本書適合以下讀者:
移動平臺應(yīng)用程序研發(fā)人員
嵌入式設(shè)備軟件研發(fā)人員
智能系統(tǒng)架構(gòu)設(shè)計與開發(fā)工作者。
對于研發(fā)人員來說,本書是一本系統(tǒng)學(xué)習(xí)和掌握深度學(xué)習(xí)原理及深入剖析移動平臺開發(fā)機(jī)器學(xué)習(xí)系統(tǒng)的指南。對于架構(gòu)師來說,本書是一本移動平臺機(jī)器學(xué)習(xí)系統(tǒng)架構(gòu)設(shè)計的實戰(zhàn)書。讀者可以深入理解移動平臺機(jī)器學(xué)習(xí)系統(tǒng)的內(nèi)部構(gòu)造以及重要組成部分,并自己設(shè)計、優(yōu)化和改進(jìn)系統(tǒng)的層次。同時,本書適合初學(xué)者學(xué)習(xí)機(jī)器學(xué)習(xí)實戰(zhàn)技術(shù),掌握開發(fā)機(jī)器學(xué)習(xí)系統(tǒng)當(dāng)中慣用的編程技巧。
勘誤和支持
雖然筆者在編寫本書的過程中經(jīng)過反復(fù)審校,全力確保本書內(nèi)容的準(zhǔn)確性,但錯誤在所難免。書中難免可能會出現(xiàn)一些錯誤或不準(zhǔn)確的描述,懇請讀者批評指正。書中所涉及的所有源代碼及工程都可以從華章官網(wǎng)(www.hzbook.com)或GitHub(https://github.com/samblg/book-mobile-ml)下載,這些項目都是開源項目,F(xiàn)在我懷著期盼和忐忑的心情,將這本拙作呈獻(xiàn)給大家,我渴望得到您的認(rèn)可,更渴望和您成為朋友,如果您有任何問題和建議,請與我聯(lián)系(電子郵件:samblg@me.com),期待能夠得到您的真摯反饋。
致謝
在創(chuàng)作本書的過程中,我得到了很多人的幫助,這里必須要一一感謝,聊表寸心(排名不分先后):顧仁民、侯捷、魯昌華、彭垚、邵良、夏臻新、于俊、彭敏、曠天亮、徐立冰、風(fēng)辰、陳煒、俞歡、Eddie Ruan、龍俊彤、石蓮、徐航、曾玉明、李佳和錢曙光。感謝我在Autodesk的同事和Cisco Systems的朋友。特別是我的良師益友金柳頎,感謝你在技術(shù)問題上的嚴(yán)謹(jǐn)精神。還要感謝機(jī)械工業(yè)出版社的高婧雅編輯對我的信任。
謹(jǐn)以此書獻(xiàn)給我最親愛的家人與朋友,你們是我奮斗路上堅強(qiáng)的后盾。
盧譽(yù)聲
于上海
序一
序二
前言
第一篇 深度學(xué)習(xí)基礎(chǔ)
第1章 向未來問好 2
1.1 機(jī)器學(xué)習(xí)即正義 2
1.1.1 照本宣科 3
1.1.2 關(guān)鍵概念概述 4
1.1.3 數(shù)學(xué)之美 5
1.2 機(jī)器學(xué)習(xí)的場景和任務(wù) 6
1.3 機(jī)器學(xué)習(xí)算法 8
1.3.1 分類算法 8
1.3.2 回歸算法 8
1.3.3 聚類算法 8
1.3.4 關(guān)聯(lián)分析算法 9
1.3.5 集成算法 9
1.3.6 強(qiáng)化算法 10
1.4 如何掌握機(jī)器學(xué)習(xí) 10
1.4.1 學(xué)習(xí)曲線 10
1.4.2 技術(shù)棧 11
1.5 深度學(xué)習(xí) 12
1.5.1 深度學(xué)習(xí)的貢獻(xiàn) 12
1.5.2 深度學(xué)習(xí)框架簡介 13
1.5.3 安裝使用深度學(xué)習(xí)框架 16
1.5.4 深度學(xué)習(xí)進(jìn)展 22
1.6 走進(jìn)移動世界的深度學(xué)習(xí) 25
1.6.1 移動平臺機(jī)器學(xué)習(xí)概述 25
1.6.2 難度和挑戰(zhàn) 26
1.7 本書框架 26
1.8 本章小結(jié) 27
第2章 機(jī)器學(xué)習(xí)基礎(chǔ) 28
2.1 機(jī)器學(xué)習(xí)的主要任務(wù) 28
2.2 貝葉斯模型 29
2.3 Logistic回歸 33
2.3.1 線性回歸 33
2.3.2 幾率與Logit 35
2.3.3 Logistic回歸 38
2.3.4 背景溯源 39
2.3.5 實現(xiàn)Logistic回歸 42
2.4 本章小結(jié) 44
第3章 人工神經(jīng)網(wǎng)絡(luò) 45
3.1 人工神經(jīng)網(wǎng)絡(luò)簡介 45
3.2 基本結(jié)構(gòu)與前向傳播 46
3.2.1 神經(jīng)元 46
3.2.2 連接與網(wǎng)絡(luò) 47
3.2.3 神經(jīng)網(wǎng)絡(luò)向量化 48
3.2.4 前向傳播 50
3.3 反向傳播算法 50
3.4 實現(xiàn)前向神經(jīng)網(wǎng)絡(luò) 53
3.4.1 神經(jīng)網(wǎng)絡(luò)與前向傳播實現(xiàn) 53
3.4.2 Softmax回歸 60
3.5 稀疏自編碼器 61
3.5.1 引子 61
3.5.2 自編碼器簡介 61
3.5.3 稀疏自編碼算法 63
3.6 神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)預(yù)處理 64
3.6.1 去均值 64
3.6.2 歸一化 65
3.7 本章小結(jié) 65
第4章 深度網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò) 66
4.1 深度網(wǎng)絡(luò) 66
4.1.1 自我學(xué)習(xí) 66
4.1.2 特征學(xué)習(xí) 67
4.1.3 深度神經(jīng)網(wǎng)絡(luò) 68
4.1.4 逐層貪婪訓(xùn)練方法 69
4.2 卷積神經(jīng)網(wǎng)絡(luò) 70
4.2.1 全連接與部分連接網(wǎng)絡(luò) 70
4.2.2 卷積 70
4.2.3 池化 72
4.2.4 卷積神經(jīng)網(wǎng)絡(luò) 73
4.3 卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn) 73
4.3.1 Layer實現(xiàn) 74
4.3.2 Net實現(xiàn) 79
4.3.3 InnerProduct實現(xiàn) 92
4.3.4 Convolution實現(xiàn) 95
4.3.5 Pooling實現(xiàn) 101
4.3.6 定義注冊頭文件 109
4.4 本章小結(jié) 110
第二篇 移動平臺深度學(xué)習(xí)基礎(chǔ)
第5章 移動平臺深度學(xué)習(xí)框架設(shè)計與實現(xiàn) 112
5.1 移動平臺深度學(xué)習(xí)系統(tǒng)開發(fā)簡介 112
5.2 ARM Linux基礎(chǔ)開發(fā)環(huán)境 113
5.2.1 通用ARM工具鏈安裝 114
5.2.2 Android NDK安裝 114
5.2.3 樹莓派工具鏈安裝 115
5.3 TensorFlow Lite介紹 115
5.3.1 TensorFlow Lite特性 115
5.3.2 TensorFlow Lite架構(gòu) 116
5.3.3 TensorFlow Lite代碼結(jié)構(gòu) 117
5.4 移動平臺性能優(yōu)化基礎(chǔ) 118
5.4.1 ARM v8體系結(jié)構(gòu) 119
5.4.2 ARM v8數(shù)據(jù)類型與寄存器 120
5.4.3 Neon指令集介紹 122
5.4.4 ARM v8內(nèi)存模型 124
5.4.5 Neon指令集加速實例 127
5.5 本章小結(jié) 140
第6章 移動平臺輕量級網(wǎng)絡(luò)實戰(zhàn) 141
6.1 適用于移動平臺的輕量級網(wǎng)絡(luò) 141
6.2 SqueezeNet 142
6.2.1 微觀結(jié)構(gòu) 142
6.2.2 宏觀結(jié)構(gòu) 142
6.2.3 核心思路 143
6.2.4 實戰(zhàn):用PyTorch實現(xiàn)SqueezeNet 144
6.3 MobileNet 153
6.4 ShuffleNet 154
6.5 MobileNet V2 155
6.5.1 MobileNet的缺陷 155
6.5.2 MobileNet V2的改進(jìn) 155
6.5.3 網(wǎng)絡(luò)結(jié)構(gòu) 156
6.5.4 實戰(zhàn):用PyTorch實現(xiàn)MobileNet V2 157
6.6 本章小結(jié) 161
第三篇 深入理解深度學(xué)習(xí)
第7章 高性能數(shù)據(jù)預(yù)處理實戰(zhàn) 164
7.1 數(shù)據(jù)預(yù)處理任務(wù) 164
7.1.1 數(shù)據(jù)清理 165
7.1.2 數(shù)據(jù)集成 165
7.1.3 數(shù)據(jù)歸約 165
7.1.4 數(shù)據(jù)變換 166
7.2 數(shù)據(jù)標(biāo)準(zhǔn)化 166
7.3 PCA 167
7.3.1 PCA的現(xiàn)實問題 167
7.3.2 PCA的計算方法 167
7.3.3 PCA的數(shù)學(xué)理論基礎(chǔ) 169
7.4 在Hurricane之上實現(xiàn)PCA 170
7.4.1 Hurricane實時處理系統(tǒng) 171
7.4.2 實現(xiàn)Hurricane Topology 172
7.4.3 實現(xiàn)PCA 178
7.5 本章小結(jié) 192
第8章 基于深度神經(jīng)網(wǎng)絡(luò)的物體檢測與識別 193
8.1 模式識別與物體識別 193
8.1.1 模式識別 193
8.1.2 模式識別系統(tǒng) 194
8.1.3 傳統(tǒng)模式識別方法 194
8.1.4 深度學(xué)習(xí)模式識別方法 197
8.2 圖像分類 197
8.2.1 LeNet 197
8.2.2 AlexNet 200
8.2.3 數(shù)據(jù)抓取整理 203
8.2.4 數(shù)據(jù)預(yù)處理 204
8.2.5 數(shù)據(jù)訓(xùn)練 206
8.3 目標(biāo)識別與物體檢測 207
8.3.1 目標(biāo)識別簡介 207
8.3.2 R-CNN 208
8.3.3 SPP-Net 209
8.3.4 Fast R-CNN 211
8.3.5 Faster R-CNN 211
8.3.6 RetinaNet 213
8.4 檢測識別實戰(zhàn) 213
8.4.1 Faster R-CNN 214
8.4.2 RetinaNet 230
8.5 移動平臺檢測識別實戰(zhàn) 237
8.5.1 移動平臺系統(tǒng)開發(fā)思路 237
8.5.2 基于RetinaNet的檢測定位實現(xiàn) 237
8.5.3 基于AlexNet的識別分類實現(xiàn) 244
8.5.4 接口設(shè)計封裝 247
8.6 本章小結(jié) 258
第四篇 深入理解移動平臺深度學(xué)習(xí)
第9章 深入移動平臺性能優(yōu)化 260
9.1 模型壓縮 260
9.2 權(quán)重稀疏化 262
9.2.1 Structured Sparsity Learning 262
9.2.2 Dynamic Network Surgery 262
9.2.3 Dynamic Network Surgery實現(xiàn) 264
9.3 模型加速 275
9.3.1 半精度與權(quán)重量化 275
9.3.2 深度壓縮 276
9.3.3 二值化網(wǎng)絡(luò) 278
9.3.4 三值化網(wǎng)絡(luò) 280
9.3.5 DoReFa-Net 282
9.3.6 編程實戰(zhàn) 283
9.4 嵌入式優(yōu)化 287
9.4.1 算法局限與改進(jìn) 287
9.4.2 理論改進(jìn) 287
9.4.3 編程實戰(zhàn) 288
9.5 嵌入式優(yōu)化代碼實現(xiàn) 290
9.5.1 量化分析實現(xiàn) 290
9.5.2 層實現(xiàn) 302
9.5.3 量化矩陣計算 309
9.6 本章小結(jié) 313
第10章 數(shù)據(jù)采集與模型訓(xùn)練實戰(zhàn) 314
10.1 收集海量數(shù)據(jù) 314
10.1.1 搜索引擎工作原理 315
10.1.2 HTTP會話 316
10.1.3 解決JavaScript渲染問題 316
10.2 圖片數(shù)據(jù)爬蟲實現(xiàn) 317
10.2.1 獲取任務(wù) 318
10.2.2 解析圖片 320
10.2.3 圖片存儲 326
10.2.4 圖片去重 327
10.2.5 完成Topology 328
10.3 訓(xùn)練與測試 330
10.3.1 模型定義 330
10.3.2 訓(xùn)練 334
10.3.3 測試 342
10.3.4 封裝 344
10.4 本章小結(jié) 345
第11章 移動和嵌入式平臺引擎與工具實戰(zhàn) 346
11.1 TensorFlow Lite構(gòu)建 346
11.2 集成TensorFlow Lite 357
11.3 核心實現(xiàn)分析 358
11.3.1 解釋器代碼分析 358
11.3.2 圖代碼分析 373
11.3.3 操作符注冊 381
11.3.4 操作符擴(kuò)展實現(xiàn) 384
11.3.5 計算與優(yōu)化模塊 399
11.4 模型處理工具 407
11.5 本章小結(jié) 425
第12章 移動平臺框架與接口實戰(zhàn) 426
12.1 Core ML 426
12.1.1 準(zhǔn)備數(shù)據(jù)和生成模型 427
12.1.2 App實戰(zhàn):引入Core ML實現(xiàn) 430
12.2 Android Neural Networks API 437
12.2.1 等等,Google還有一個ML Kit 437
12.2.2 NNAPI編程模型 437
12.2.3 創(chuàng)建網(wǎng)絡(luò)與計算 439
12.2.4 JNI封裝與調(diào)用 451
12.2.5 App實戰(zhàn):集成NNAPI 454
12.3 實戰(zhàn):實現(xiàn)Android圖像分類器App 459
12.3.1 JNI封裝 459
12.3.2 Java調(diào)用 474
12.4 未來之路 479
12.5 本章小結(jié) 480