TensorFlow 学习地图

前言

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几行,就能准确辨识手写阿拉伯数字,但是,并没有说明神经网路是如何求解的,因此,笔者建议还是应该从『梯度下降法』开始了解优化求解的步骤与原理,如下图:
https://ithelp.ithome.com.tw/upload/images/20210816/200019767CbJ2oM0Yd.png

其中:

  1. 正向传导:藉由『张量』(Tensor)计算误差及损失函数。
  2. 反向传导:透过『偏微分』计算梯度,同时,利用『梯度下降法』寻找最佳解。

因此,建议应该从基础到进阶,逐步理解神经网路设计的原理,顺序如下:

  1. 张量(Tensor)运算:包括向量、矩阵的运算。
  2. 自动微分(Automatic Differentiation):梯度计算、梯度下降优化求解(Optimization),不管是TensorFlow或PyTorch都一样,透过自动微分功能,神经网路才能找到最佳解。
  3. 各式神经层:包括完全连接层(Dense)、卷积(Conv1D、Conv2D、Conv3D)、循环神经层(RNN、LSTM、GRU)等。
  4. 神经网路:以各种神经层构建的网路模型,还包括各式的Activation Function、损失函数(Loss Function)、优化器(Optimizer)、效能衡量指标(Metrics),模型又分为顺序模型(Sequential model)及Functional API。

https://ithelp.ithome.com.tw/upload/images/20210817/20001976vjMJw1cJeX.png

扩展

Keras熟悉後,再以Keras为核心,整合整个生环境的各项工具使用。
https://ithelp.ithome.com.tw/upload/images/20210817/20001976skGpIr1jtW.png

  1. TensorBoard:提供模型及训练过程视觉化的工具,也提供除错的功能。
  2. Callback:在训练过程中设定Callback,可作模型存档、训练提前结束、TensorBoard整合…,甚至可自订Callback,蒐集更多的训练资讯。
  3. Dataset:Generator资料结构,可逐批读入资料,不必一次全部载入记忆体,造成记忆体不足,适合大型资料集的专案应用,另外支援Cache、Prefetch…等效能提升的功能。
  4. Data Augmentation:结合Dataset,可提供影像资料增补的功能,包括影像偏移、旋转、拉近/拉远、裁切…等功能,产生更多的训练资料,使模型更精准。
  5. Keras Applications:TensorFlow提供许多的预先训练好的模型(pre-trained model),他们都是历届影像辨识大赛的冠亚军,可以直接采用其模型与权重,也可采用部分模型。
  6. TF Hub:提供许多进阶的pre-trained model,例如物件侦测等。
  7. TF Serving:提供模型布署的指令。
  8. Estimator:暂时忘了吧

结语

以上是笔者一路追随TensorFlow/Keras的使用经验,若有谬误,请大家不吝指正。

工商广告一下:
深度学习 -- 最佳入门迈向 AI 专题实战
https://ithelp.ithome.com.tw/upload/images/20210817/20001976mCaS636cqk.jpg


<<:  欢迎下载 PDF分解器 PDFdissector【免费】

>>:  股票下单失败,出现讯息:全额预收

教练,我想创业...

近期接触到了这本书:「麻省理工 MIT 黄金创业课」 透过六大面向以及二十四个步骤来系统性地提升创业...

利用网页浏览器执行Raspberry Pi的程序

前面有提到Raspberry pi有网路的功能 既然有网路 就可以将感测器所计算出来的数据 传送到云...

Python random 套件

今天要来介绍的是random套件,这也是个非常实用的套件,他主要是用来在范围内随机取某一个数或资料,...

10. CI x Github Action

CI 持续整合。 为什麽要 CI 呢? 想想我们前面写了那麽辛苦的自动测试,结果有人不跑测试就上传。...

【基础应用篇】DAY2.软硬体规格全攻略

您成功注册MusesAI帐号了吗? 还没的话赶紧去看DAY1.注册教学文章喔! 欢迎来到DAY2的教...