前言
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 tfmnist = 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.0model = 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几行,就能準确辨识手写阿拉伯数字,但是,并没有说明神经网路是如何求解的,因此,笔者建议还是应该从『梯度下降法』开始了解优化求解的步骤与原理,如下图:
其中:
正向传导:藉由『张量』(Tensor)计算误差及损失函数。反向传导:透过『偏微分』计算梯度,同时,利用『梯度下降法』寻找最佳解。因此,建议应该从基础到进阶,逐步理解神经网路设计的原理,顺序如下:
张量(Tensor)运算:包括向量、矩阵的运算。自动微分(Automatic Differentiation):梯度计算、梯度下降优化求解(Optimization),不管是TensorFlow或PyTorch都一样,透过自动微分功能,神经网路才能找到最佳解。各式神经层:包括完全连接层(Dense)、卷积(Conv1D、Conv2D、Conv3D)、循环神经层(RNN、LSTM、GRU)等。神经网路:以各种神经层构建的网路模型,还包括各式的Activation Function、损失函数(Loss Function)、优化器(Optimizer)、效能衡量指标(Metrics),模型又分为顺序模型(Sequential model)及Functional API。扩展
Keras熟悉后,再以Keras为核心,整合整个生环境的各项工具使用。
结语
以上是笔者一路追随TensorFlow/Keras的使用经验,若有谬误,请大家不吝指正。
工商广告一下:
深度学习 -- 最佳入门迈向 AI 专题实战。