TensorFlow 簡(jiǎn)介
本節(jié)將從五個(gè)方面對(duì) TensorFlow 進(jìn)行一個(gè)簡(jiǎn)單的介紹。包括 TensorFlow 是什么、能做什么?為什么選擇 TensorFlow、TensorFlow 的發(fā)展以及 TensorFlow 的核心理念。
1. 什么是 TenosrFlow
“TensorFlow是一個(gè)開源軟件庫(kù),用于各種感知和語(yǔ)言理解任務(wù)的機(jī)器學(xué)習(xí)?!?——Wiki百科
這種過(guò)于官方化的定義可能比較難于理解,于是我們給出一個(gè)比較容易理解的解釋:TensorFlow 就是一個(gè)開源的用于機(jī)器學(xué)習(xí)的框架,我們可以使用 TensorFlow 來(lái)快速地構(gòu)建神經(jīng)網(wǎng)絡(luò),同時(shí)快捷地進(jìn)行網(wǎng)絡(luò)的訓(xùn)練、評(píng)估與保存。
也正是因?yàn)?TensorFlow 是一個(gè)開源的軟件庫(kù),因此只要我們安裝了 TensorFlow,我們就可以使用import 的方式來(lái)引入。
import tensorflow as tf
那么具體說(shuō)來(lái) TensorFlow 可以干什么呢?簡(jiǎn)單的回答是:TensorFlow 主要負(fù)責(zé)機(jī)器學(xué)習(xí)的每一個(gè)步驟,具體包括:
- 模型的構(gòu)建;
- 模型的訓(xùn)練;
- 模型的保存與加載;
- 模型的評(píng)估;
- 使用加速器提升性能;
- 在生產(chǎn)環(huán)境中部署網(wǎng)絡(luò);
- 對(duì)模型的數(shù)據(jù)進(jìn)行可視化(TensorBoard);
- 其他功能。
通過(guò)這樣的梳理我們可以發(fā)現(xiàn),TensorFlow 可以滿足我們?cè)?strong>機(jī)器學(xué)習(xí)中的從模型構(gòu)建到模型的部署的絕大部分的工作需求。
2. TensoFlow的發(fā)展歷史
TensorFlow 是由谷歌公司開發(fā)的一款機(jī)器學(xué)習(xí)的框架,最初在谷歌大腦團(tuán)隊(duì)內(nèi)部使用(那時(shí)還叫作DistBelief),主要用于構(gòu)建一些常用的神經(jīng)網(wǎng)絡(luò),并于 2015 年宣布開源。
DistBelief 最初用于構(gòu)建各尺度下的神經(jīng)網(wǎng)絡(luò)分布式學(xué)習(xí)和交互系統(tǒng)(初學(xué)者可能不容易理解,暫時(shí)可以認(rèn)為是用于構(gòu)建分布式的神經(jīng)網(wǎng)絡(luò)),這被稱作第一代機(jī)器學(xué)習(xí)系統(tǒng)。
DistBelief 框架在谷歌旗下的產(chǎn)品中被廣泛使用。后來(lái)在一步步的發(fā)展過(guò)程之中不斷增添新的功能,并進(jìn)行了重構(gòu),最終形成了 TensorFlow,被稱作第二代機(jī)器學(xué)習(xí)系統(tǒng),目前 TensorFlow 框架已經(jīng)廣泛應(yīng)用于各個(gè)機(jī)器學(xué)習(xí)領(lǐng)域。
得益于 TensorFlow 的出現(xiàn)與不斷地完善,機(jī)器學(xué)習(xí)開發(fā)者們可以更加迅速地、快捷地來(lái)構(gòu)建自己的神經(jīng)網(wǎng)絡(luò),同時(shí)可以以一種更加高階、簡(jiǎn)潔的語(yǔ)法方式來(lái)進(jìn)行模型的訓(xùn)練與保存。從工業(yè)的角度來(lái)說(shuō),TensorFlow 有著較快的訓(xùn)練速度;而在人工智能行業(yè)的競(jìng)爭(zhēng)中,更快的訓(xùn)練速度意味著更強(qiáng)的行業(yè)競(jìng)爭(zhēng)力,再加之以分布式訓(xùn)練的優(yōu)勢(shì),TensorFlow 得以在工業(yè)生產(chǎn)之中大規(guī)模使用。
我們總覽整個(gè) TensorFlow 的發(fā)展歷程,從最開始非正式版本誕生時(shí)受到廣泛關(guān)注,到 1.x 版本的迅速發(fā)展,再到 2019 年 2.0 版本發(fā)布,TenosrFlow 正在生產(chǎn)的角度上逐漸趨于完備。
作為一個(gè)機(jī)器學(xué)習(xí)的框架,TensorFlow 的工業(yè)設(shè)計(jì)比較完整,而且它的更新也在順應(yīng)時(shí)代潮流向前發(fā)展(比如 2.x 版本的 Eager 模式的發(fā)布)。依托于 Google 的強(qiáng)大研發(fā)與號(hào)召力,我們有理由相信TensorFlow 的未來(lái)的發(fā)展前景會(huì)非常廣闊。
3. TensorFlow的特點(diǎn)
既然 TensorFlow 如此受歡迎,那么它一定有很多的特點(diǎn)在吸引著我們的開發(fā)者和企業(yè),那就讓我們來(lái)簡(jiǎn)單了解一下TensorFlow的一些特點(diǎn):
- 高度的可移植性:也就是說(shuō),相同的代碼和模型可以同時(shí)在服務(wù)器、PC 和移動(dòng)設(shè)備上運(yùn)行。除此以外,TensorFlow 可以選擇在 CPU 或者在 GPU 上面運(yùn)行,做到了真正的可移植。
- 豐富且友好的文檔:在 TensorFlow 的官方文檔之中,幾乎為所有的函數(shù)與所有的參數(shù)都進(jìn)行了詳細(xì)的闡述。并且很大一部分的官方教程支持中文,對(duì)于初學(xué)者來(lái)說(shuō)是很大的福音。
- 內(nèi)置算法非常完善:在 TensorFLow 之中內(nèi)嵌了我們?cè)跈C(jī)器學(xué)習(xí)中能用到的絕大部分的算法。
- 非常適合用于工業(yè)生產(chǎn):TensorFlow 內(nèi)置的 Service、分布式等結(jié)構(gòu)能夠幫助個(gè)人和企業(yè)很輕松地完成模型的訓(xùn)練與部署。
- 高階、簡(jiǎn)潔又簡(jiǎn)單的 API:這是 TensorFlow 的一大優(yōu)點(diǎn),同時(shí)也是一個(gè)缺點(diǎn),它在讓初學(xué)者更快地入門的同時(shí),也會(huì)讓自定義網(wǎng)絡(luò)結(jié)構(gòu)變得不是很靈活。
總結(jié):TensorFlow 是一個(gè)當(dāng)下流行的機(jī)器學(xué)習(xí)框架,我們可以使用該框架快速地進(jìn)行模型的構(gòu)建、訓(xùn)練與部署;同時(shí) TensorFlow 也是一個(gè)在工業(yè)化生產(chǎn)中非常常用的機(jī)器學(xué)習(xí)框架。
4. TensorFlow 的版本與選擇
在十年的發(fā)展歷程之中,TensorFlow 經(jīng)歷了很多的版本的變化,每個(gè)大的版本更迭都有著很多特點(diǎn)。我們知道 TensorFlow 是從 1.x 版本發(fā)展到 2.x 版本的,但是網(wǎng)絡(luò)上很多教程還都是 1.x 版本的教程。在這里,大家可以大概了解一下TensorFlow的版本發(fā)展歷程:
- 2010 年-2015 年,谷歌大腦團(tuán)隊(duì)在其內(nèi)部使用 DistBelief 框架進(jìn)行機(jī)器學(xué)習(xí)的相關(guān)工作,后來(lái)經(jīng)過(guò)不斷地簡(jiǎn)化與重構(gòu)逐漸形成了初步的 TesnorFlow,此時(shí)的 TensorFlow 還不是很完善。
- 2015 年-2017 年,年輕的 TensorFlow 正式開源(0.1版本),此時(shí)的 TensorFlow 依然處在 0.x 的非正式版本,并且開始支持 IOS、Windows 等平臺(tái)。
- 2017 年-2019 年 10 月,TensorFlow進(jìn)入了 1.x 階段,也正是在這個(gè)時(shí)期,TensorFlow 的用戶大量增長(zhǎng),收獲了非常多的支持。同時(shí),TesnorFlow 也在此過(guò)程中加入了多 CPU 與多 GPU 運(yùn)行的支持,并且可運(yùn)行在 64 位設(shè)備上。
- 2019 年 10 月-現(xiàn)在,TensorFlow 進(jìn)入了 2.0 時(shí)代,其內(nèi)部嵌入了 Keras,同時(shí)引入了 Eager Execution 模式,初學(xué)者的學(xué)習(xí)門檻更低了。
截至到 2020 年 7 月,最新的 TensorFlow 版本是 2.2 版本,因此本教程采用的是 TensorFlow2.2 版本。使用新的版本一方面可以避免一些老版本的遺留問(wèn)題,另一方面也可以體驗(yàn)到一些新的功能。
5. TensorFlow 與其他同類型機(jī)器學(xué)習(xí)框架的對(duì)比
談到機(jī)器學(xué)習(xí)框架的選擇,目前使用最多的就是 TensorFlow 與 PyTorch,因此我們這里以 Pytorch 為例來(lái)比較 TensorFlow 與其他框架的不同。
5.1 TensorFlow
說(shuō)到這里我們不得不說(shuō)一下 TensorFlow 的優(yōu)點(diǎn),相比于其他的機(jī)器學(xué)習(xí)框架,Tensorflow 框架是最適用于工業(yè)部署的一個(gè)機(jī)器學(xué)習(xí)框架,換句話說(shuō),TensorFlow 非常適用于在生產(chǎn)環(huán)境中進(jìn)行應(yīng)用。下面我們來(lái)細(xì)數(shù)一下 TensorFlow 的優(yōu)點(diǎn)。
- 整個(gè)項(xiàng)目開源;
- 文檔非常全面而且包含中文教程,學(xué)習(xí)成本比較低;
- 其內(nèi)部含有很多高階神經(jīng)網(wǎng)絡(luò) API,我們可以用一個(gè)語(yǔ)句來(lái)生產(chǎn)一個(gè)網(wǎng)絡(luò);
- 使用其內(nèi)部的 TensorFlow Service 可以實(shí)現(xiàn)快速上線部署;
- 得益于高階 API,使用 TensorFlow 進(jìn)行神經(jīng)網(wǎng)絡(luò)開發(fā)非常迅速;
- 內(nèi)部?jī)?nèi)置 TesnorBoard 工具,可以很好地進(jìn)行可視化工作;
- 對(duì)移動(dòng)設(shè)備的支持非常友好;
- TensorFlow 內(nèi)部?jī)?nèi)置分布式訓(xùn)練工具,開源很方便地進(jìn)行分布式訓(xùn)練。
我們討論了這么多優(yōu)點(diǎn),TensorFlow就沒有缺點(diǎn)嗎?當(dāng)然有,TensorFlow 也有一些顯而易見的缺點(diǎn):
- TensorFlow程序的調(diào)試較為困難,我們不能深入其內(nèi)部進(jìn)行調(diào)試;
- TensorFlow 的許多高階 API 導(dǎo)致我們修改我們自己的模型比較困難(相對(duì)而言);
- TensorFlow1.x 與 TensorFlow2.x 的差別比較大,以前的代碼遷移比較困難。
5.2 Pytorch
那我們反過(guò)來(lái)看 PyTorch,相比于 TensorFlow 來(lái)說(shuō),Pytorch 是一個(gè)新興的工具,但是它的發(fā)展非常迅速,而且擁有良好的社區(qū)環(huán)境。Pytorch 相比于 TensorFlow 的優(yōu)點(diǎn)有以下幾點(diǎn):
- 以類 Python 的方式運(yùn)行,調(diào)試非常容易,我們可以很快的定位到問(wèn)題所在;
- 可以在內(nèi)部構(gòu)建動(dòng)態(tài)圖,而 TensorFLow 構(gòu)建的是靜態(tài)圖。
當(dāng)然,與 TensorFLow 相比,它的缺點(diǎn)也很明顯:
- 運(yùn)行速度等非功能需求不如 TensorFLow;
- 不適用于工業(yè)生產(chǎn),部署等工業(yè)生產(chǎn)操作較為復(fù)雜;
- 可視化需要借助第三方工具。
總結(jié)來(lái)說(shuō),如果你想進(jìn)行神經(jīng)網(wǎng)絡(luò)的快速構(gòu)建、訓(xùn)練與部署,那么 TensorFlow 是你非常好的選擇,但是如果你只是想從事一些科研的方面的工作,那么 TensorFlow 可能并沒有 Pytorch 那么容易駕馭。
6. 為什么要學(xué)習(xí) TensorFlow
在當(dāng)下,人工智能已經(jīng)遍地開花。無(wú)論是我們手機(jī)上的應(yīng)用還是交通監(jiān)管,都離不開人工智能的身影。毫無(wú)疑問(wèn),在過(guò)去幾十年里,人工智能是已經(jīng)深入的改變了我們的生活方式與就業(yè)情景。在這個(gè)瞬息萬(wàn)變的競(jìng)爭(zhēng)格局中,任何沒有利用人工智能的機(jī)構(gòu)都將被遠(yuǎn)遠(yuǎn)地甩在后面。
無(wú)論是各個(gè)國(guó)家,還是各個(gè)公司組織,都在積極地向機(jī)器學(xué)習(xí)方向發(fā)展。也正是在這個(gè)人工智能的大潮之中,我們的機(jī)器學(xué)習(xí)行業(yè)才會(huì)如火如荼地發(fā)展。目前階段,各個(gè)企業(yè)和組織對(duì)于我們機(jī)器學(xué)習(xí)領(lǐng)域的人才需求量都非常大,人工智能行業(yè)的發(fā)展前景非常廣闊。在未來(lái)幾年甚至十幾年,機(jī)器學(xué)習(xí)領(lǐng)域的就業(yè)可以說(shuō)是“最賺錢的行業(yè)”之一。作為 IT 工作者,我們應(yīng)該抓住時(shí)代的潮流,用人工智能的技能來(lái)武裝自己,學(xué)習(xí)如何進(jìn)行機(jī)器學(xué)習(xí)的開發(fā)工作。
在目前,最受歡迎的機(jī)器學(xué)習(xí)框架就是 TensorFLow 與 Pytorch,這兩者都有著很廣闊的前景。相比而來(lái) TensorFlow 更加適用于工業(yè)生產(chǎn),而 Pytorch 更加適用于科學(xué)研究。
TensorFlow 無(wú)可厚非地能被認(rèn)定為神經(jīng)網(wǎng)絡(luò)中最好用的庫(kù)之一。它在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)方面有著得天獨(dú)厚的優(yōu)勢(shì)。通過(guò)使用TensorFlow我們就可以快速地入門神經(jīng)網(wǎng)絡(luò),大大降低了深度學(xué)習(xí)的開發(fā)成本和開發(fā)難度。
7. 本門課程的設(shè)計(jì)思路
本門課程會(huì)從機(jī)器學(xué)習(xí)初學(xué)者的角度來(lái)逐漸切入,從簡(jiǎn)單的模型開始,以實(shí)例為驅(qū)動(dòng),讓諸位在實(shí)踐之中學(xué)習(xí)。
總體來(lái)說(shuō),本課程為從零開始的 TensorFlow 教程,分為以下幾個(gè)大的章節(jié):
- 如何安裝自己的 TensorFlow;并從快速入門開始,讓各位了解 TensorFlow 構(gòu)建模型的一般流程;
- 幫助各位使用 Keras 來(lái)構(gòu)建自己的模型,以此來(lái)讓各位了解 Keras 編程;
- 引導(dǎo)諸位了解 TenosrFLow 中各種數(shù)據(jù)格式的使用方法;
- 幫助各位了解 TensorFlow 的 Estimator 編程;
- TensorFlow 中的一些高級(jí)技巧;
- TesnorFlow 的可視化工具——TensorBoard。
具體到每一個(gè)章節(jié),我們會(huì)采用案例驅(qū)動(dòng)的方式來(lái)進(jìn)行講解與學(xué)習(xí),我們會(huì)將具體的細(xì)節(jié)與機(jī)器學(xué)習(xí)的知識(shí)融入到每一個(gè)案例之中,讓諸位在實(shí)踐中學(xué)習(xí)。諸位應(yīng)該在學(xué)習(xí)的時(shí)候最大程度地動(dòng)手實(shí)踐一下,一方面可以提升自己的實(shí)踐能力,另一方面也可以加深自己對(duì) TensorFlow 的認(rèn)知程度。
8. 你需要掌握的基礎(chǔ)
因?yàn)闄C(jī)器學(xué)習(xí)屬于計(jì)算機(jī)科學(xué)中一個(gè)較為高級(jí)的層次,因此你在學(xué)習(xí)之前需要一些知識(shí)儲(chǔ)備。具體來(lái)說(shuō),你需要以下基礎(chǔ)知識(shí):
- Python 編程的基本知識(shí);
- 面向?qū)ο缶幊痰幕局R(shí);
- 熟悉一種或多種 PythonIDE,比如 Pycharm 等工具;
- 善于使用搜索引擎、社區(qū)和官方文檔查找自己的問(wèn)題。
總而言之,TensorFlow 是一個(gè)生態(tài)完整的框架;無(wú)論你是初學(xué)者,還是機(jī)器學(xué)習(xí)開發(fā)者,抑或是想在機(jī)器學(xué)習(xí)領(lǐng)域有所建樹,那么 TensorFlow 將會(huì)是你的不二之選。