這幾天關於tensorflow 2.0版本釋出的訊息鋪天蓋地,但其實tf官方之前就釋出過新版tensorflow的測試版本。我是從tensorflow 0.10版本開始使用的,聽說tf在2.0版本中使用了動態圖的概念,就嘗試了一下官方釋出的測試版,不得不為tensorflow採用動態圖而歡呼。幾天前2.0版本正式釋出,會有更多研究機器學習的朋友用到這個最新版本的tensorflow。本文就討論一下使用tensorflow 2.0版本的一些最基本的問題,以避免大家浪費時間在一些雞毛蒜皮的小事上。也帶大家嚐嚐鮮,然後可以決定要不要擁抱tensorflow 2.0。
1. 使用virtualenv配置tensorflow環境嚐鮮一個模組畢竟還是有風險的,特別是對於正在使用舊版本的模組開發的時候。這種情況下virtualenv就派上用場了。使用virtualenv建立虛擬環境,在虛擬環境中安裝新版的tensorflow對系統中安裝的舊版本就沒有影響。即使發現新版模組有問題直接刪掉虛擬環境就行,不影響正在進行的工作。我這裡使用的Mac OS mojave。
(a) 建立虛擬環境
virtualenv -p python3 --no-site-packages tf2.0-py3
(b) 啟動虛擬環境
source tf2.0-py3/bin/activate
(c) 在虛擬環境下安裝tensorflow
pip3 install tensorflow
由於一些眾所周知的原因,直接使用pip下載安裝tensorflow是非常慢的,這就需要一點隨機應變了。pip在下載模組時會顯示下載的地址,我們可以把這個地址複製下來,使用具備斷點續傳功能下載器或者在一些特殊的網路環境中下載下來。然後就可以使用pip從whl檔案安裝了,
pip3 install tensorflow-2.0.0-cp37-cp37m-macosx_10_11_x86_64.whl
安裝過程還會下載一些比較小的模組,速度慢點也就忍著吧。如果在特殊網路環境中,可以通過export http_proxy和htts_proxy來設定終端的網路環境。
(d) 給當前環境安裝ipykernel
pip3 install ipykernel
(e) 將當前虛擬環境設定為notebook中的一個kernel
python3 -m ipykernel install --user --name tf2.0-py
然後在notebook中檢視一下tensorflow的版本。
2. Hello World如果用一句話來形容你是程式設計師,不能說跟程式語言相關的東西,你該怎麼做?那就是“Hello World”。我們也採用這種方式來測試一下tensorflow中最基本的字串常量。
tf中的hello world
直接學習tf2的初學者或許不會對這個最基本的演示感到驚奇,但是從tf0.x和tf1.x開始使用tensorflow的朋友們應該會感到驚豔。畢竟在2.0之前的版本中,tensorflow採用的是靜態圖的方式來執行的,意思就是說,需要先將圖構建完成,然後在一個Session環境中啟動圖來得到最終結果。靜態圖大概是很多初學者放棄使用tensorflow轉投pytorch懷抱的一個重要原因,因為程式碼實在太晦澀,而且開發效率比較低下。在2.0版本中,tensorflow跟隨了其他一些開放框架的動態圖概念,不得不說這是開發者的福音。當然,對於從之前版本遷移到2.0版本的朋友來說還是會痛苦相當長的一段時間,但是對於初學者而言可以直接從最新的2.0版本開始,完全不要理會之前的那個原始狀態的版本。
3. 訓練一個官網小模型tensorflow官網上有個簡單的線性模型實驗,用這個實驗來嚐鮮是再合適不過。程式碼量比較小,方便理解,過程比較清晰,也便於接受。
(1) 定義模型和相關操作
首先定義一個模型,可以使用面向物件的方式,當然也可以使用面向過程的方式。這裡使用一個物件來封裝模型的建立和訓練相關的操作,然後測試一下其中的函式功能。在以前的版本中,這種中間輸出的做法簡直不敢想象。
建立模型
(2) 生成訓練資料
生成一組訓練資料,並採用一個簡單的線性對映和10%的隨機噪聲產生對應真值。
生成資料
(3) 訓練模型
訓練模型的過程也非常簡單,完全拋棄了之前那種醜陋的Session設計實在是大快人心。
訓練模型
訓練完畢之後可以看一下損失函式變化的曲線圖。
訓練過程損失函式曲線
嚐鮮tensorflow 2.0到這裡就結束了。總體的使用體驗是:tf2.0深度嵌入python,跟一般的python第三方庫使用基本一致,列印中間變數,輸出最終結果都非常方便。tensoflow是一個非常龐大的機器學習庫,嚐鮮完成之後就可以繼續深入了解了。之後有時間我會寫系列文章來講述使用tensorflow2.0開發深度學習,並與其他框架進行比較。本文的notebook版本檔案在github山共享,喜歡使用notebook的朋友可以在github中cnbluegeek/notebbk倉庫下載。