在這個實作中,我們將學會:
登入GCP,開啟Notebooks後,複製課程 Github repo (如Day9的Part 1 & 2步驟)。
在左邊的資料夾結構,點進 training-data-analyst > courses > machine_learning > deepdive > 03_tensorflow,然後打開檔案 a_tfstart.ipynb。
首先我們先用常用的numpy來做張量的加法。
sess.run(c)
)。feed_dict={}
來給進 Placeholder 的值。tf.constant
將值傳入計算面積的函式裡,這邊我們使用 tf.placeholder
的方式。tf.enable_eager_execution()
。因為TensorFlow預設是惰性求值,在沒有改成急切模式前,若要除錯的話需要一些技巧,大致上和一般來除錯的步驟類似:
而在使用張量運算時,最容易出錯的就是形狀(shape),或者說是張量維度在運算間的不一致,如下圖例子,將一個(4,2)的張量和(4,)的張量做加法,維度是不一致的,這樣在TensorFlow中就會出現錯誤訊息。
又或者是輸入批次資料的大小,如下面例子,通常會是不固定的,所以會給 None
來表示可變化,若這時候給進的資料沒有對上一開始設定的維度也會出錯。
形狀的錯誤算是蠻常見的錯誤,如果遇到這類的錯誤我們可以用下列的四種方法來解決:
tf.reshape()
tf.expand_dims()
tf.slice()
tf.squeeze()
第二種常見的錯誤便是資料型態不同造成的錯誤,例如下圖是將float32和int32混用造成的錯誤訊息。
舉個簡單的例子來看,若今天要計算 a+b ,a 是浮點數,但 b 是整數,這樣子的加法在TensorFlow也會出現錯誤訊息。
一般類似這樣的錯誤,通常我們會使用 tf.cast()
,將資料型態作轉換,便可解決不同型態造成的問題。
那麼如果我是遇到更困難、複雜的錯誤呢?這時候就需要用到除錯的工具了,下面三種是常用來除錯全部程式的工具。
tf.Print()
可以用在你懷疑出錯的地方,讓該地方的值印出來,看看是不是你設想的樣子。
而另一種方式就是在程式執行時,多下 --debug
,讓TensorFlow程式進入debug模式,這時候就可以設定一般除錯時會用到的如break point,可以做更進一步的除錯。
今天實際操作了簡單的TensorFlow程式並且說明除錯的方式,明天我們將介紹 “Estimator API”。