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