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