TensorFlow 在2.x版進行大幅度的改版,並且納入Keras後,整體的架構變得更加完整易用,但也造成學習路徑的多樣化,筆者整理一些K書心得分享如下。
TensorFlow 2.x版預設執行模式已改為 Eager Execution Mode,與1.x版的靜態運算圖(Computational Graph)完全不相容,1.x版必須包在session中執行,因此,在目前網路中仍充斥許多套件或範例屬於1.x版,雖然,可以利用下列方式更改預設執行模式為1.x版,但筆者建議就斷捨離了,因為,不會有未來性了。
if tf.__version__[0] != '1': # 是否為 TensorFlow 1.x版
import tensorflow.compat.v1 as tf # 改變載入套件的命名空間(Namespace)
tf.disable_v2_behavior() # 使 2.x 版功能失效(Disable)
TensorFlow目前改版仍非常頻繁,且許多類別/函數常常會變更命名空間或規格,因此,參考文件還是應以TensorFlow官網為主,也可以參考Keras官網,它也已改成介紹TensorFlow為主,而非本身開發的Keras套件,筆者比較喜歡Keras官網的編排,但注意有些範例程式是以TensorFlow預覽版(Night build)為基礎,若執行出錯,應考慮是否為TensorFlow版本的問題。
另外,TensorFlow官網主要有兩個頁籤『教學』(Tutorial)與『指南』(Guide),建議讀者先從『指南』入門,而非『教學』,『教學』其實是針對影像/文字/音訊作主題式的介紹。
TensorFlow官網或Keras官網教學並沒有明顯的學習路徑(Roadmap)指引,兩個官網及大部分書籍都是從下列程式開始介紹。
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
不明就裡的讀者可能就已以為從此處出發,開始研究各式神經網路,例如CNN、RNN等,對此筆者並不贊同,上述程式只是要展示TensorFlow的威力強大與易用姓,短短10幾行,就能準確辨識手寫阿拉伯數字,但是,並沒有說明神經網路是如何求解的,因此,筆者建議還是應該從『梯度下降法』開始瞭解優化求解的步驟與原理,如下圖:
其中:
因此,建議應該從基礎到進階,逐步理解神經網路設計的原理,順序如下:
Keras熟悉後,再以Keras為核心,整合整個生環境的各項工具使用。
以上是筆者一路追隨TensorFlow/Keras的使用經驗,若有謬誤,請大家不吝指正。
工商廣告一下:
深度學習 -- 最佳入門邁向 AI 專題實戰。