iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 7
0
AI & Data

深度學習裡的冰與火之歌 : Tensorflow vs PyTorch系列 第 7

Day 7 邁向 Tensorflow 2.0 之路

給讀者,這是 9/22 11:38 pm 搶先版,未來還會再陸續更新。

自動升級 Script

正如昨天的文章所說的,Tensorflow 提供了升級程式,提供 1.x 到 2.x 的語法轉移。我們今天會介紹官方建議的升級步驟和忠告。

首先,這個升級 script 叫做 tf_upgrade_v2 ,在 Tensorflow v1.13 的版本中就已經被打包在裡面。大家可以在有安裝 v1.13 以上的 Tensorflow 的 virtual environment 中,在 environment 的 bin 資料夾中找到。

這個 tf_upgrade_v2 本身也是一個 python script,它的主要目的是針對那些 v1.x 和 v2.x 程式句法上有所變化的部分,做自動轉換,主要是在命令列上使用。接著我們來看一下 tf_upgrade_v2 的簡短使用說明。

$tf_upgrade_v2 -h                                                                                                            
usage: tf_upgrade_v2 [-h] [--infile INPUT_FILE] [--outfile OUTPUT_FILE]
                     [--intree INPUT_TREE] [--outtree OUTPUT_TREE]
                     [--copyotherfiles COPY_OTHER_FILES]
                     [--reportfile REPORT_FILENAME]

Convert a TensorFlow Python file to 2.0

Simple usage:
  tf_upgrade_v2.py --infile foo.py --outfile bar.py
  tf_upgrade_v2.py --intree ~/code/old --outtree ~/code/new

optional arguments:
  -h, --help            show this help message and exit
  --infile INPUT_FILE   如果只想轉換單一的檔案,請給予這個檔案的路徑去做轉換
  --outfile OUTPUT_FILE 如果只想轉換單一的檔案,請給予輸出檔案的名字
  --intree INPUT_TREE   如果想轉換在該目錄下的所有檔案,請給予輸入資料夾名稱的相對或絕對路徑
  --outtree OUTPUT_TREE 如果想轉換在該目錄下的所有檔案,請給予輸出資料夾名稱的相對或絕對路徑
  --copyotherfiles COPY_OTHER_FILES
                        如果想轉換在該目錄下的所有檔案,是否需要拷貝其他檔案
  --reportfile REPORT_FILENAME
                        指定將轉換的 log 檔儲存在哪裡(預設為 report.txt)

由上可以看到,有兩種使用 tf_upgrade_v2 的方法,那就是:

  1. 單一 python file 的升級:可以用 --infile 指定你想要做升級轉換的 python script,包含 v1.x 的 Tensorflow 原始碼,以及使用 --outfile 來指定輸出的檔案。
  2. 整個專案的升級:可以用 --intree 來指定想要做升級轉換的專案資料夾,同時用 --outtree來指定輸出的符合 v2.0 標準的 tensorflow 專案資料夾。

關於這兩個 scenarios,前者很適合對研究者使用 Jupyter notebook 或相似的軟體作轉換。使用者可以使用 %%write 將在 notebook 上寫好的模型寫到硬碟後,經過升級轉換後,再用 %load 去載入升級完的模型。

第二個 scenario,對於一些已經配置程服務的模型可能比較常用到,同時,tf_upgrade_v2 這個 script 還佛心來著,順便會把專案內容下和 tensorflow 模型非相關的檔案一併拷貝過來,只要指定 --copyotherfiles 這個選項,同時也可以自己指定升級程式在執行期間吐出的 log 的存放地點,以免在升級期間出了什麼差錯,可以依據 log 來查詢。

Tensorflow 官方建議的升級過程

Tensorflow 在官方的網站上提到,雖然有提供升級的 script,可以對一個專案裡的所有 tensorflow 相關程式都給予轉換,但是為了能夠讓升級 script 達到最佳的效果。Tensorflow 建議再呼叫升級 script 前,使用下列流程:

  1. 準備好你的 unit test:升級 script 非聖賢,總會有些錯誤。良好涵蓋率的 unit test 可以保護你的專案不受升級 script 更改而產生不可逆的失敗結果。
  2. 安裝 Tensorflow v1.14 以上的版本:若要升級到 2.0 之前,最佳的做法是先確定你目前的專案有最新 1.x 版本的支持。從 v1.14 開始,有納入和 v2.0 相容的 tf.compat.v2 模組。
  3. 確定你的 unit test 在 v1.14 上是沒有問題的。
  4. 可以對你的專案資料夾執行 tf_upgrade_v2,這個升級 script 會 recursively 針對資料夾內的 v1.x 語法做替換,如果有相等的 v2.0 語法,若沒有,則會被視為專屬於 v1.x 的語法,而以 tf.compat.v1 來做替換。
  5. 重新執行轉換過的 unit test 在 v1.14 以上的版本。在第四個階段,經過tf_upgrade_v2轉換的 unit test 應該要仍舊至少與 v1.14 以上版本相容。
  6. 查看升級 script 的 log,是否有錯誤或警告訊息。
  7. 現在你可以安裝 Tensorflow 2.0 了!
  8. 在 2.0 下使用 v1.disable_v2_behavior() 再次測試和 v1.14 的測試,也期待會有相同的結果。
  9. 開啟 2.0 的行為,並正式進入 2.0 的世界

這裡要提到的是步驟 8,利用 tf.compat.v1.disable_v2_behavior 在 2.0 的環境下,進行 unittest 是否還是與 v1.14 相容。這個 function call 必須在其他 tensorflow 的程式碼宣告前被執行,其目的是選取 1.x ,若模型包含 v1.x 和 v2.0 不相容的行為。

所以,結論是...

今天的文章都來自於Upgrade code to TensorFlow 2.0,希望以後能有更多的時間測試不同複雜度的 1.x 程式轉乘 2.x。


上一篇
Day 6 Tensorflow 2.0
下一篇
Day 8: Tensorflow 在 2.0 很好,那麼 PyTorch 呢?
系列文
深度學習裡的冰與火之歌 : Tensorflow vs PyTorch31

尚未有邦友留言

立即登入留言