給讀者,這是 9/22 11:38 pm 搶先版,未來還會再陸續更新。
正如昨天的文章所說的,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
的方法,那就是:
--infile
指定你想要做升級轉換的 python script,包含 v1.x 的 Tensorflow 原始碼,以及使用 --outfile
來指定輸出的檔案。--intree
來指定想要做升級轉換的專案資料夾,同時用 --outtree
來指定輸出的符合 v2.0 標準的 tensorflow 專案資料夾。關於這兩個 scenarios,前者很適合對研究者使用 Jupyter notebook 或相似的軟體作轉換。使用者可以使用 %%write
將在 notebook 上寫好的模型寫到硬碟後,經過升級轉換後,再用 %load
去載入升級完的模型。
第二個 scenario,對於一些已經配置程服務的模型可能比較常用到,同時,tf_upgrade_v2
這個 script 還佛心來著,順便會把專案內容下和 tensorflow 模型非相關的檔案一併拷貝過來,只要指定 --copyotherfiles 這個選項,同時也可以自己指定升級程式在執行期間吐出的 log 的存放地點,以免在升級期間出了什麼差錯,可以依據 log 來查詢。
Tensorflow 在官方的網站上提到,雖然有提供升級的 script,可以對一個專案裡的所有 tensorflow 相關程式都給予轉換,但是為了能夠讓升級 script 達到最佳的效果。Tensorflow 建議再呼叫升級 script 前,使用下列流程:
tf.compat.v2
模組。tf_upgrade_v2
,這個升級 script 會 recursively 針對資料夾內的 v1.x 語法做替換,如果有相等的 v2.0 語法,若沒有,則會被視為專屬於 v1.x 的語法,而以 tf.compat.v1 來做替換。tf_upgrade_v2
轉換的 unit test 應該要仍舊至少與 v1.14 以上版本相容。v1.disable_v2_behavior()
再次測試和 v1.14 的測試,也期待會有相同的結果。這裡要提到的是步驟 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。