iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0

TensorFlow API如何運作

主旨:透過實作了解 TensorFlow

[GCP Lab實作-6]:撰寫低階的TensorFlow程式

這個實作中,我們將學會:

  • 建構一個圖(graph)
  • 運行一個圖
  • 餵值近一個圖
  • 用TensorFlow計算三角形面積

[Part 1]:開始使用TensorFlow

  1. 登入GCP,開啟Notebooks後,複製課程 Github repo (如Day9的Part 1 & 2步驟)。

  2. 在左邊的資料夾結構,點進 training-data-analyst > courses > machine_learning > deepdive > 03_tensorflow,然後打開檔案 a_tfstart.ipynb

  3. 首先我們先用常用的numpy來做張量的加法

  1. 接著我們來看看在TensorFlow裡面要做加法的話該怎麼做,一開始要先建立圖。

  1. 再來就是運行圖( sess.run(c) )。

https://ithelp.ithome.com.tw/upload/images/20190913/20120208ka4JgqNtEo.png

  1. 使用 feed_dict={} 來給進 Placeholder 的值。

  1. 接著我們從TensorFlow來計算三角形的面積,使用有名的海龍公式

  1. 前一步是使用 tf.constant 將值傳入計算面積的函式裡,這邊我們使用 tf.placeholder 的方式。

  1. TensorFlow預設是惰性求值,那麼要改成急切模式的話該如何使用呢?答案是 tf.enable_eager_execution()

TensorFlow程式除錯

因為TensorFlow預設是惰性求值,在沒有改成急切模式前,若要除錯的話需要一些技巧,大致上和一般來除錯的步驟類似:

  1. 閱讀錯誤訊息
  2. 獨立出有疑問的方法
  3. 送入一些給定的資料進去方法看看
  4. 知道如何解決一般常見的問題

張量形狀不同的錯誤

而在使用張量運算時,最容易出錯的就是形狀(shape),或者說是張量維度在運算間的不一致,如下圖例子,將一個(4,2)的張量和(4,)的張量做加法,維度是不一致的,這樣在TensorFlow中就會出現錯誤訊息。

又或者是輸入批次資料的大小,如下面例子,通常會是不固定的,所以會給 None表示可變化,若這時候給進的資料沒有對上一開始設定的維度也會出錯。

形狀的錯誤算是蠻常見的錯誤,如果遇到這類的錯誤我們可以用下列的四種方法來解決:

  1. tf.reshape()
  2. tf.expand_dims()
  3. tf.slice()
  4. tf.squeeze()

資料型態不同的錯誤

第二種常見的錯誤便是資料型態不同造成的錯誤,例如下圖是將float32和int32混用造成的錯誤訊息。

舉個簡單的例子來看,若今天要計算 a+b ,a 是浮點數,但 b 是整數,這樣子的加法在TensorFlow也會出現錯誤訊息。

一般類似這樣的錯誤,通常我們會使用 tf.cast() ,將資料型態作轉換,便可解決不同型態造成的問題。

全部程式的除錯

那麼如果我是遇到更困難、複雜的錯誤呢?這時候就需要用到除錯的工具了,下面三種是常用來除錯全部程式的工具。

tf.Print() 可以用在你懷疑出錯的地方,讓該地方的值印出來,看看是不是你設想的樣子。

而另一種方式就是在程式執行時,多下 --debug,讓TensorFlow程式進入debug模式,這時候就可以設定一般除錯時會用到的如break point,可以做更進一步的除錯。


今天實際操作了簡單的TensorFlow程式並且說明除錯的方式,明天我們將介紹 “Estimator API”。


上一篇
鐵人賽Day11 - Intro to TensorFlow (1/6)
下一篇
鐵人賽Day13 - Intro to TensorFlow (3/6)
系列文
Machine Learning with TensorFlow on Google Cloud Platform30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言