TensorFlow深度学习应用开发实战(深度学习简介和开发环境搭建)
一、深度學習的發(fā)展及其應用
1.1 深度學習的發(fā)展歷程
1956年,John McCarthy(約翰·麥卡錫)等人在美國達特茅斯學院(Dartmounth College)開會探討如何使用機器模擬人的智能時,提出了“人工智能”這一概念。
這標志著人工智能學科的誕生,這一年也稱為人工智能元年。
作為人工智能最重要的一個分支,深度學習近年來發(fā)展迅速,在國內(nèi)外都引起了廣泛的關(guān)注。
1.2 深度學習的起源階段
1943年,心理學家Warren Mcculloch和數(shù)理邏輯學家Walter Pitts在合作的論文中提出并給出了人工神經(jīng)網(wǎng)絡(luò)的概念及人工神神經(jīng)元的數(shù)學模型,從而開創(chuàng)了人類神經(jīng)網(wǎng)絡(luò)研究的時代。
1956年,心理學家Frank Rosenblatt受到這種思想的啟發(fā),認為這個簡單想法足以創(chuàng)造一個可以學習識別物體的機器,并設(shè)計了算法和硬件。直到1957年,Frank Rosenblatt在《New York Times》上發(fā)表文章《Electronic ‘Brain’ Teaches Itself》,首次提出了可以模型人類感知能力的機器,并稱之為感知機(Perceptron)
感知機是有單層計算單元的神經(jīng)網(wǎng)絡(luò),由線性元件及閾值元件組成。感知機的邏輯圖如圖
1969年,美國數(shù)學家及人工智能先驅(qū)Marvin Minsky(馬文·明斯基)在其著作中證明感知器本質(zhì)上是一種線性模型,只能處理線性分類的問題,這使得神經(jīng)網(wǎng)絡(luò)的研究陷入近20年的停滯。
1.3 深度學習的發(fā)展階段
沉寂了多年后,關(guān)于神經(jīng)網(wǎng)絡(luò)的研究開始慢慢復蘇。
1986年,Geoffrey Hinton(杰弗里·辛頓)提出一種適用于多層感知器的反向傳播算法———BP算法。
BP算法全稱叫作誤差反向傳播(error Back Propagation,或者也叫作誤差逆?zhèn)鞑?算法。
其算法基本思想為:在前饋網(wǎng)絡(luò)中,輸入信號經(jīng)輸入層輸入,通過隱層計算由輸出層輸出,輸出值與標記值比較,若有誤差,將誤差反向由輸出層向輸入層傳播,在這個過程中,利用梯度下降算法對神經(jīng)元權(quán)值進行調(diào)整。
BP算法完美解決了非線性分類的問題,人人工神經(jīng)網(wǎng)絡(luò)再次引起人們廣泛關(guān)注。
1989年,Robert Hecht-Nielsen(羅伯特·赫克特-尼爾森)證明了多層感知器的萬能逼近原理。
此博文中介紹的論文是 1990 年?Le Page 組織的一個會議的 Invited paper.
一維階梯函數(shù)的線性組合能逼近任何連續(xù)一維連續(xù)函數(shù)。
Sigmoidal 函數(shù)可以逼近階梯函數(shù)。因此,一維Sigmoidal函數(shù)的線性組合能逼近任何連續(xù)函數(shù)。
把坐標軸在R^{n}中沿各個方向旋轉(zhuǎn) (如同CT原理),在每一射線上,構(gòu)造Sigmoidal函數(shù)的線性組合,就可以逼近R^{n}中任何連續(xù)函數(shù)。
優(yōu)點:用一個簡單到不能再簡單的函數(shù)的線性組合和疊合可以逼近任何連續(xù)函數(shù)。
缺點:天下沒有免費的午餐。
為了R^{n} 中函數(shù)達到精度1/N。需要識別 O(n^{N}) 個參數(shù)。這是無法承受的。
?無論用階梯函數(shù)還是Sigmoidal 函數(shù),關(guān)鍵是利用其跳躍部分。因此,在用梯度法時,經(jīng)常會發(fā)生導數(shù)不可控。
上述兩個致命缺點長期阻礙了神經(jīng)網(wǎng)絡(luò)的發(fā)展和應用。深度學習就是圍繞著這些問題來做的。通俗的講,是實現(xiàn)神經(jīng)網(wǎng)絡(luò)逼近能力的技術(shù)
由于20世紀80年代計算機的硬件水平有限,運算能力跟不上,導致神經(jīng)網(wǎng)絡(luò)規(guī)模增大時使用BP算法出現(xiàn)了“梯度消失”問題,這導致BP算法的發(fā)展受到了限制,人工神經(jīng)網(wǎng)絡(luò)的發(fā)展再次進入到瓶頸期。
1.4 深度學習的爆發(fā)階段
2006年是深度學習元年。這一年,Geoffey Hinton(杰弗里·辛頓)提出了深度學習的概念,并提出了深層網(wǎng)絡(luò)訓練中梯度消失問題的解決方案———通過無監(jiān)督預訓練對權(quán)值進行初始化,再加上有監(jiān)督訓練微調(diào)。
1、無監(jiān)督預訓練是用來訓練的數(shù)據(jù)不包含輸出目標,需要學習算法自動學習到一些有價值的信息。
2、有監(jiān)督訓練,又稱監(jiān)督學習,是一個機器學習中的方法,可以由訓練資料中學到或建立一個模式(函數(shù) / learning model),并依此模式推測新的實例。訓練資料是由輸入物件(通常是向量)和預期輸出所組成。函數(shù)的輸出可以是一個連續(xù)的值(稱為回歸分析),或是預測一個分類標簽(稱作分類)。
2012年,Geoffey Hinton 課題組為了證明深度學習的潛力,首次參加ImageNet圖像識別比賽,其構(gòu)建的卷積神經(jīng)網(wǎng)絡(luò)模型AlexNet一舉奪冠,且再分類準確率和分類速度上碾壓第二名SVM(支持向量機模型)。
2014年,Facebook公司基于深度學習技術(shù)的DeepFace項目,在人臉識別方面的準確率已經(jīng)達到97%以上,跟人眼識別的準確率幾乎沒有差別,再一次證明了深度學習算法在圖像識別方面的領(lǐng)先性。
2016年,Google公司基于深度學習開發(fā)的AlphaGo以4:1的比分戰(zhàn)勝了國際頂尖圍棋高手李世石,使得深度學習在世界范圍內(nèi)再次掀起狂潮。
又一年,2017年,世界第一的中國棋手柯潔九段與AlphaGo進行對抗
1.5深度學習的應用領(lǐng)域
1、計算機視覺
1、什么是計算機視覺(Computer vision)?
計算機視覺(Computer Vision),人靠視覺來做飯、越過障礙等等,Computer Vision就是讓計算機有視覺,目的是讓計算機看懂圖像(image)和視頻(video),手機或相機固然可以拍出很精細和細節(jié)的照片,比人看的遠,清除,但是李飛飛教授說過:“
hear is the not the same as to listen, To take pictures is not the same as to see”,所以計算機視覺目的是看懂。
看-------看是很簡單的,計算機比人更會看(image, video)
懂-----我認為懂是讓計算機能夠在image和video中,根據(jù)人的命令來做相應的動作。就像人看懂一樣,首先人要看到東西(image or video),然后大腦根據(jù)東西做出相關(guān)動作。由于計算機不能夠像人一樣global地分析image or video,所以我們要做image process :為存儲、除數(shù)和表示而對image data進行處理,以便計算機自動理解。自動理解后,我們向其發(fā)送指令,它便可以和人一樣。
2、自然語言處理
????? 自然語言處理( Natural Language Processing, NLP)是計算機科學領(lǐng)域與人工智能領(lǐng)域中的一個重要方向。它研究能實現(xiàn)人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數(shù)學于一體的科學。因此,這一領(lǐng)域的研究將涉及自然語言,即人們?nèi)粘J褂玫恼Z言,所以它與語言學的研究有著密切的聯(lián)系,但又有重要的區(qū)別。自然語言處理并不是一般地研究自然語言,而在于研制能有效地實現(xiàn)自然語言通信的計算機系統(tǒng),特別是其中的軟件系統(tǒng)。因而它是計算機科學的一部分
1.6深度學習框架簡介
1、TensorFlow
TensorFlow是一個開放源代碼軟件庫,用于進行高性能數(shù)值計算。借助其靈活的架構(gòu),用戶可以輕松地將計算工作部署到多種平臺(CPU、GPU、TPU)和設(shè)備(桌面設(shè)備、服務(wù)器集群、移動設(shè)備、邊緣設(shè)備等)。
ensorFlow 是一個用于研究和生產(chǎn)的開放源代碼機器學習庫。TensorFlow 提供了各種 API,可供初學者和專家在桌面、移動、網(wǎng)絡(luò)和云端環(huán)境下進行開發(fā)。
TensorFlow是采用數(shù)據(jù)流圖(data flow graphs)來計算,所以首先我們得創(chuàng)建一個數(shù)據(jù)流流圖,然后再將我們的數(shù)據(jù)(數(shù)據(jù)以張量(tensor)的形式存在)放在數(shù)據(jù)流圖中計算. 節(jié)點(Nodes)在圖中表示數(shù)學操作,圖中的邊(edges)則表示在節(jié)點間相互聯(lián)系的多維數(shù)據(jù)數(shù)組, 即張量(tensor)。訓練模型時tensor會不斷的從數(shù)據(jù)流圖中的一個節(jié)點flow到另一節(jié)點, 這就是TensorFlow名字的由來。
張量(Tensor):張量有多種. 零階張量為 純量或標量 (scalar) 也就是一個數(shù)值. 比如 [1],一階張量為 向量 (vector), 比如 一維的 [1, 2, 3],二階張量為 矩陣 (matrix), 比如 二維的 [[1, 2, 3],[4, 5, 6],[7, 8, 9]],以此類推, 還有 三階 三維的 …
張量從流圖的一端流動到另一端的計算過程。它生動形象地描述了復雜數(shù)據(jù)結(jié)構(gòu)在人工神經(jīng)網(wǎng)中的流動、傳輸、分析和處理模式。
(1)標量(scalar):即一個數(shù)值,它是計算的最小單元,如“1”或“3.2”等。
(2)向量(vector):由一些標量構(gòu)成的一維數(shù)組,如[1, 3.2, 4.6]等。
(3)矩陣(matrix):是由標量構(gòu)成的二維數(shù)組。
(4)張量(tensor):由多維(通常)數(shù)組構(gòu)成的數(shù)據(jù)集合,可理解為高維矩陣。
使用TensorFlow的優(yōu)點主要表現(xiàn)在如下幾個方面:
(1)TensorFlow有一個非常直觀的構(gòu)架,顧名思義,它有一個“張量流”。用戶可以很容易地看到張量流動的每一個部分(借助TensorBoard,在后面的章節(jié)會有所提及)。
(2)TensorFlow可輕松地在CPU/GPU上部署,進行分布式計算。
(3)TensorFlow跨平臺性高,靈活性強。TensorFlow不但可以在Linux、Mac和Windows系統(tǒng)下運行,甚至還可以在移動終端下工作。
當然,TensorFlow也有不足之處,主要表現(xiàn)在它的代碼比較底層,需要用戶編寫大量的代碼,而且很多相似的功能,用戶還不得不“重造輪子”。但“瑕不掩瑜”,TensorFlow還是以雄厚技術(shù)積淀、穩(wěn)定的性能,一騎紅塵,“笑傲”于眾多深度學習框架之巔。
2、Caffe
Caffe是一個深度學習框架,Caffe在BSD許可下開源,使用C++編寫,帶有Python接口。是賈揚清在加州大學伯克利分校攻讀博士期間創(chuàng)建了Caffe項目。項目托管于GitHub,擁有眾多貢獻者。Caffe應用于學術(shù)研究項目、初創(chuàng)原型甚至視覺、語音和多媒體領(lǐng)域的大規(guī)模工業(yè)應用。雅虎還將Caffe與Apache Spark集成在一起,創(chuàng)建了一個分布式深度學習框架CaffeOnSpark。2017年4月,Facebook發(fā)布Caffe2,加入了遞歸神經(jīng)網(wǎng)絡(luò)等新功能。2018年3月底,Caffe2并入PyTorch。
特點
Caffe 完全開源,并且在有多個活躍社區(qū)溝通解答問題,同時提供了一個用于訓練、測試等完整工具包,可以幫助使用者快速上手。此外 Caffe 還具有以下特點:
模塊性:Caffe 以模塊化原則設(shè)計,實現(xiàn)了對新的數(shù)據(jù)格式,網(wǎng)絡(luò)層和損失函數(shù)輕松擴展。
表示和實現(xiàn)分離:Caffe 已經(jīng)用谷歌的 Protocl Buffer定義模型文件。使用特殊的文本文件 prototxt 表示網(wǎng)絡(luò)結(jié)構(gòu),以有向非循環(huán)圖形式的網(wǎng)絡(luò)構(gòu)建。
Python和MATLAB結(jié)合: Caffe 提供了 Python 和 MATLAB 接口,供使用者選擇熟悉的語言調(diào)用部署算法應用。
GPU 加速:利用了 MKL、Open BLAS、cu BLAS 等計算庫,利用GPU實現(xiàn)計算加速。
結(jié)構(gòu)
簡單來講,Caffe 中的數(shù)據(jù)結(jié)構(gòu)是以 Blobs-layers-Net 形式存在。其中,Blobs 是通過 4 維向量形式(num,channel,height,width)存儲網(wǎng)絡(luò)中所有權(quán)重,激活值以及正向反向的數(shù)據(jù)。作為 Caffe 的標準數(shù)據(jù)格式,Blob 提供了統(tǒng)一內(nèi)存接口。Layers 表示的是神經(jīng)網(wǎng)絡(luò)中具體層,例如卷積層等,是 Caffe 模型的本質(zhì)內(nèi)容和執(zhí)行計算的基本單元。layer 層接收底層輸入的 Blobs,向高層輸出 Blobs。在每層會實現(xiàn)前向傳播,后向傳播。Net 是由多個層連接在一起,組成的有向無環(huán)圖。一個網(wǎng)絡(luò)將最初的 data 數(shù)據(jù)層加載數(shù)據(jù)開始到最后的 loss 層組合為整體。
3、PyTorch
PyTorch是一個的Python機器學習開源庫,基于Torch,用于自然語言處理等應用程序。
2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一個基于Python的可續(xù)計算包,提供兩個高級功能:1、具有強大的GPU加速的張量計算(如NumPy)。2、包含自動求導系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)。
PyTorch的前身是Torch,其底層和Torch框架一樣,但是使用Python重新寫了很多內(nèi)容,不僅更加靈活,支持動態(tài)圖,而且提供了Python接口。它是由Torch7團隊開發(fā),是一個以Python優(yōu)先的深度學習框架,不僅能夠?qū)崿F(xiàn)強大的GPU加速,同時還支持動態(tài)神經(jīng)網(wǎng)絡(luò)。
PyTorch既可以看作加入了GPU支持的numpy,同時也可以看成一個擁有自動求導功能的強大的深度神經(jīng)網(wǎng)絡(luò)。除了Facebook外,它已經(jīng)被Twitter、CMU和Salesforce等機構(gòu)采用
優(yōu)點:
-
PyTorch是相當簡潔且高效快速的框架
-
設(shè)計追求最少的封裝
-
設(shè)計符合人類思維,它讓用戶盡可能地專注于實現(xiàn)自己的想法
-
與google的Tensorflow類似,FAIR的支持足以確保PyTorch獲得持續(xù)的開發(fā)更新
-
PyTorch作者親自維護的論壇 供用戶交流和求教問題
-
入門簡單
4、MXNet
MXNet 是亞馬遜(Amazon)選擇的深度學習庫。它擁有類似于 Theano 和 TensorFlow 的數(shù)據(jù)流圖,為多 GPU 配置提供了良好的配置,有著類似于 Lasagne 和 Blocks 更高級別的模型構(gòu)建塊,并且可以在你可以想象的任何硬件上運行(包括手機)。對 Python 的支持只是其冰山一角—MXNet 同樣提供了對 R、Julia、C++、Scala、Matlab,和 Javascript 的接口。
增強了sparse.dot運算符的性能。
MXNet自動設(shè)置OpenMP,以便在未設(shè)置NUM_OMP_THREADS時使用所有可用的CPU內(nèi)核以最大限度地提高CPU利用率。
一元運算符和二元運算符可以避免在小型陣列上使用OpenMP,因為使用OpenMP實際上會損害多線程開銷。
在CPU上顯著提高了broadcast_add,broadcast_mul等的性能 。
使用NCCL 2.1版或更新版本時,建議將環(huán)境變量NCCL_LAUNCH_MODE設(shè)置為PARALLEL。
MXNet可以加速任何數(shù)值計算。神經(jīng)網(wǎng)絡(luò)中,每一層由一個線性函數(shù)和一個非線性變換組成。
開發(fā)環(huán)境搭建鏈接:
https://blog.csdn.net/weixin_45626468/article/details/114692986?spm=1001.2014.3001.5501
總結(jié)
以上是生活随笔為你收集整理的TensorFlow深度学习应用开发实战(深度学习简介和开发环境搭建)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aabb词语大全一6(aabb词语)
- 下一篇: 大学开学时间2021(什么时候开学)