มีคำถาม? เชื่อมต่อกับชุมชนที่ฟอรัม TensorFlow เยี่ยมชมฟอรัม

อัปเกรดรหัสเป็น TensorFlow 2 โดยอัตโนมัติ

ดูใน TensorFlow.org เรียกใช้ใน Google Colab ดูแหล่งที่มาบน GitHub ดาวน์โหลดสมุดบันทึก

TensorFlow 2.0 ประกอบด้วยการเปลี่ยนแปลง API มากมายเช่นการจัดลำดับอาร์กิวเมนต์ใหม่การเปลี่ยนชื่อสัญลักษณ์และการเปลี่ยนค่าเริ่มต้นสำหรับพารามิเตอร์ การปรับเปลี่ยนทั้งหมดนี้ด้วยตนเองจะน่าเบื่อและมีแนวโน้มที่จะเกิดข้อผิดพลาด เพื่อปรับปรุงการเปลี่ยนแปลงและเพื่อให้การเปลี่ยนไปใช้ TF 2.0 ราบรื่นที่สุดทีมงาน TensorFlow ได้สร้างยูทิลิตี้ tf_upgrade_v2 เพื่อช่วยในการเปลี่ยนรหัสเดิมเป็น API ใหม่

การใช้งานโดยทั่วไปเป็นดังนี้:

tf_upgrade_v2 \
  --intree my_project/ \
  --outtree my_project_v2/ \
  --reportfile report.txt

มันจะเร่งกระบวนการอัพเกรดของคุณโดยการแปลงสคริปต์ TensorFlow 1.x Python ที่มีอยู่เป็น TensorFlow 2.0

สคริปต์การแปลงจะทำงานโดยอัตโนมัติให้มากที่สุด แต่ยังคงมีการเปลี่ยนแปลงทางไวยากรณ์และโวหารที่สคริปต์ไม่สามารถดำเนินการได้

โมดูลที่เข้ากันได้

ไม่สามารถอัปเกรดสัญลักษณ์ API บางตัวได้โดยใช้การแทนที่สตริง เพื่อให้แน่ใจว่าโค้ดของคุณยังคงได้รับการสนับสนุนใน TensorFlow 2.0 สคริปต์อัพเกรดจะมีโมดูล compat.v1 โมดูลนี้แทนที่สัญลักษณ์ TF 1.x เช่น tf.foo ด้วยการอ้างอิง tf.compat.v1.foo เทียบเท่า แม้ว่าโมดูลความเข้ากันได้จะดี แต่เราขอแนะนำให้คุณเปลี่ยนการพิสูจน์อักษรด้วยตนเองและย้ายไปยัง API ใหม่ในเนมสเปซ tf.* แทน tf.compat.v1 โดยเร็วที่สุด

เนื่องจากการเลิกใช้งานโมดูล TensorFlow 2.x (ตัวอย่างเช่น tf.flags และ tf.contrib ) การเปลี่ยนแปลงบางอย่างจึงไม่สามารถแก้ไขได้โดยเปลี่ยนไปใช้ compat.v1 การอัปเกรดโค้ดนี้อาจต้องใช้ไลบรารีเพิ่มเติม (เช่น absl.flags ) หรือเปลี่ยนเป็นแพ็กเกจใน เทนเซอร์โฟลว์ / แอดออ

ส่วนที่เหลือของคู่มือนี้จะสาธิตวิธีการใช้สคริปต์การอัพเกรด แม้ว่าสคริปต์อัพเกรดจะใช้งานง่าย แต่ขอแนะนำอย่างยิ่งให้คุณใช้สคริปต์เป็นส่วนหนึ่งของกระบวนการต่อไปนี้:

  1. การทดสอบหน่วย : ตรวจสอบให้แน่ใจว่ารหัสที่คุณกำลังอัปเกรดมีชุดทดสอบหน่วยที่มีความครอบคลุมที่เหมาะสม นี่คือรหัส Python ดังนั้นภาษาจะไม่ปกป้องคุณจากข้อผิดพลาดหลายคลาส ตรวจสอบให้แน่ใจว่าการอ้างอิงใด ๆ ที่คุณได้รับการอัปเกรดให้เข้ากันได้กับ TensorFlow 2.0

  2. ติดตั้ง TensorFlow 1.14 : อัปเกรด TensorFlow ของคุณเป็นเวอร์ชัน TensorFlow 1.x ล่าสุดอย่างน้อย 1.14 ซึ่งรวมถึง TensorFlow 2.0 API สุดท้ายใน tf.compat.v2

  3. ทดสอบด้วย 1.14 : ตรวจสอบให้แน่ใจว่าการทดสอบหน่วยของคุณผ่าน ณ จุดนี้ คุณจะเรียกใช้งานซ้ำ ๆ ในขณะที่คุณอัปเกรดดังนั้นการเริ่มจากสีเขียวจึงเป็นสิ่งสำคัญ

  4. รันสคริปต์การอัพเกรด : รัน tf_upgrade_v2 บน tf_upgrade_v2 ซอร์สทั้งหมดของคุณรวมการทดสอบ การดำเนินการนี้จะอัปเกรดโค้ดของคุณเป็นรูปแบบที่ใช้เฉพาะสัญลักษณ์ที่มีอยู่ใน TensorFlow 2.0 สัญลักษณ์ที่เลิกใช้แล้วจะเข้าถึงได้ด้วย tf.compat.v1 ในที่สุดสิ่งเหล่านี้จะต้องได้รับการเอาใจใส่จากเจ้าหน้าที่ แต่ไม่ใช่ในทันที

  5. เรียกใช้การทดสอบที่แปลงแล้วด้วย TensorFlow 1.14 : โค้ดของคุณควรทำงานได้ดีใน TensorFlow 1.14 ทำการทดสอบหน่วยของคุณอีกครั้ง ข้อผิดพลาดใด ๆ ในการทดสอบของคุณที่นี่หมายความว่ามีข้อบกพร่องในสคริปต์อัปเกรด โปรดแจ้งให้เราทราบ

  6. ตรวจสอบคำเตือนและข้อผิดพลาดในรายงานการอัปเกรด : สคริปต์เขียนไฟล์รายงานที่อธิบายถึง Conversion ที่คุณควรตรวจสอบอีกครั้งหรือการดำเนินการโดยเจ้าหน้าที่ที่คุณต้องดำเนินการ ตัวอย่างเช่นอินสแตนซ์ของการมีส่วนร่วมที่เหลืออยู่จะต้องมีการดำเนินการโดยเจ้าหน้าที่เพื่อนำออก โปรดปรึกษา RFC สำหรับคำแนะนำเพิ่มเติม

  7. ติดตั้ง TensorFlow 2.0 : ณ จุดนี้ควรเปลี่ยนไปใช้ TensorFlow 2.0 ได้อย่างปลอดภัย

  8. ทดสอบด้วย v1.disable_v2_behavior : การรันการทดสอบของคุณอีกครั้งด้วย al v1.disable_v2_behavior() ในฟังก์ชันหลักของการทดสอบควรให้ผลลัพธ์เหมือนกับการรันภายใต้ 1.14

  9. เปิดใช้งานลักษณะการทำงาน V2 : ขณะนี้การทดสอบของคุณทำงานโดยใช้ v2 API แล้วคุณสามารถเริ่มมองหาการเปิดพฤติกรรม v2 ได้ ขึ้นอยู่กับวิธีการเขียนโค้ดของคุณอาจต้องมีการเปลี่ยนแปลงบางอย่าง ดูรายละเอียดใน คู่มือการย้าย ข้อมูล

การใช้สคริปต์อัพเกรด

ติดตั้ง

ก่อนเริ่มต้นตรวจสอบให้แน่ใจว่าได้ติดตั้ง TensorlFlow 2.0 แล้ว

import tensorflow as tf

print(tf.__version__)
2.3.0

โคลนที่เก็บ git เทนเซอร์โฟลว์ / โมเดล เพื่อให้คุณมีโค้ดที่จะทดสอบ:

git clone --branch r1.13.0 --depth 1 https://github.com/tensorflow/models
Cloning into 'models'...
remote: Enumerating objects: 2927, done.[K
remote: Counting objects: 100% (2927/2927), done.[K
remote: Compressing objects: 100% (2449/2449), done.[K
remote: Total 2927 (delta 509), reused 2036 (delta 403), pack-reused 0[K
Receiving objects: 100% (2927/2927), 369.04 MiB | 44.65 MiB/s, done.
Resolving deltas: 100% (509/509), done.
Checking out files: 100% (2768/2768), done.

อ่านวิธีใช้

ควรติดตั้งสคริปต์ด้วย TensorFlow นี่คือความช่วยเหลือในตัว:

tf_upgrade_v2 -h
2020-09-10 01:42:59.274658: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
usage: tf_upgrade_v2 [-h] [--infile INPUT_FILE] [--outfile OUTPUT_FILE]
                     [--intree INPUT_TREE] [--outtree OUTPUT_TREE]
                     [--copyotherfiles COPY_OTHER_FILES] [--inplace]
                     [--no_import_rename] [--no_upgrade_compat_v1_import]
                     [--reportfile REPORT_FILENAME] [--mode {DEFAULT,SAFETY}]
                     [--print_all]

Convert a TensorFlow Python file from 1.x to 2.0

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

optional arguments:
  -h, --help            show this help message and exit
  --infile INPUT_FILE   If converting a single file, the name of the file to
                        convert
  --outfile OUTPUT_FILE
                        If converting a single file, the output filename.
  --intree INPUT_TREE   If converting a whole tree of files, the directory to
                        read from (relative or absolute).
  --outtree OUTPUT_TREE
                        If converting a whole tree of files, the output
                        directory (relative or absolute).
  --copyotherfiles COPY_OTHER_FILES
                        If converting a whole tree of files, whether to copy
                        the other files.
  --inplace             If converting a set of files, whether to allow the
                        conversion to be performed on the input files.
  --no_import_rename    Not to rename import to compat.v2 explicitly.
  --no_upgrade_compat_v1_import
                        If specified, don't upgrade explicit imports of
                        `tensorflow.compat.v1 as tf` to the v2 apis.
                        Otherwise, explicit imports of the form
                        `tensorflow.compat.v1 as tf` will be upgraded.
  --reportfile REPORT_FILENAME
                        The name of the file where the report log is
                        stored.(default: report.txt)
  --mode {DEFAULT,SAFETY}
                        Upgrade script mode. Supported modes: DEFAULT: Perform
                        only straightforward conversions to upgrade to 2.0. In
                        more difficult cases, switch to use compat.v1. SAFETY:
                        Keep 1.* code intact and import compat.v1 module.
  --print_all           Print full log to stdout instead of just printing
                        errors

ตัวอย่างรหัส TF1

นี่คือสคริปต์ TensorFlow 1.0 ที่เรียบง่าย:

head -n 65 models/samples/cookbook/regression/custom_regression.py | tail -n 10
# Calculate loss using mean squared error
  average_loss = tf.losses.mean_squared_error(labels, predictions)

  # Pre-made estimators use the total_loss instead of the average,
  # so report total_loss for compatibility.
  batch_size = tf.shape(labels)[0]
  total_loss = tf.to_float(batch_size) * average_loss

  if mode == tf.estimator.ModeKeys.TRAIN:
    optimizer = params.get("optimizer", tf.train.AdamOptimizer)

เมื่อติดตั้ง TensorFlow 2.0 แล้วจะไม่ทำงาน:

(cd models/samples/cookbook/regression && python custom_regression.py)
2020-09-10 01:43:01.613673: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
Traceback (most recent call last):
  File "custom_regression.py", line 162, in <module>
    tf.logging.set_verbosity(tf.logging.INFO)
AttributeError: module 'tensorflow' has no attribute 'logging'

ไฟล์เดียว

สคริปต์อัพเกรดสามารถรันบนไฟล์ Python ไฟล์เดียว:

!tf_upgrade_v2 \
  --infile models/samples/cookbook/regression/custom_regression.py \
  --outfile /tmp/custom_regression_v2.py
2020-09-10 01:43:03.844314: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
INFO line 38:8: Renamed 'tf.feature_column.input_layer' to 'tf.compat.v1.feature_column.input_layer'
INFO line 43:10: Renamed 'tf.layers.dense' to 'tf.compat.v1.layers.dense'
INFO line 46:17: Renamed 'tf.layers.dense' to 'tf.compat.v1.layers.dense'
INFO line 57:17: tf.losses.mean_squared_error requires manual check. tf.losses have been replaced with object oriented versions in TF 2.0 and after. The loss function calls have been converted to compat.v1 for backward compatibility. Please update these calls to the TF 2.0 versions.
INFO line 57:17: Renamed 'tf.losses.mean_squared_error' to 'tf.compat.v1.losses.mean_squared_error'
INFO line 61:15: Added keywords to args of function 'tf.shape'
INFO line 62:15: Changed tf.to_float call to tf.cast(..., dtype=tf.float32).
INFO line 65:40: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer'
INFO line 68:39: Renamed 'tf.train.get_global_step' to 'tf.compat.v1.train.get_global_step'
INFO line 83:9: tf.metrics.root_mean_squared_error requires manual check. tf.metrics have been replaced with object oriented versions in TF 2.0 and after. The metric function calls have been converted to compat.v1 for backward compatibility. Please update these calls to the TF 2.0 versions.
INFO line 83:9: Renamed 'tf.metrics.root_mean_squared_error' to 'tf.compat.v1.metrics.root_mean_squared_error'
INFO line 142:23: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer'
INFO line 162:2: Renamed 'tf.logging.set_verbosity' to 'tf.compat.v1.logging.set_verbosity'
INFO line 162:27: Renamed 'tf.logging.INFO' to 'tf.compat.v1.logging.INFO'
INFO line 163:2: Renamed 'tf.app.run' to 'tf.compat.v1.app.run'
TensorFlow 2.0 Upgrade Script
-----------------------------
Converted 1 files
Detected 0 issues that require attention
--------------------------------------------------------------------------------


Make sure to read the detailed log 'report.txt'

สคริปต์จะพิมพ์ข้อผิดพลาดหากไม่พบการแก้ไขสำหรับโค้ด

แผนผังไดเรกทอรี

โครงการทั่วไปรวมถึงตัวอย่างง่ายๆนี้จะใช้ไฟล์มากกว่าหนึ่งไฟล์ โดยทั่วไปแล้วต้องการอัพเกรดแพ็คเกจทั้งหมดดังนั้นสคริปต์จึงสามารถรันบนแผนผังไดเร็กทอรี:

# upgrade the .py files and copy all the other files to the outtree
!tf_upgrade_v2 \
    --intree models/samples/cookbook/regression/ \
    --outtree regression_v2/ \
    --reportfile tree_report.txt
2020-09-10 01:43:06.108169: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
INFO line 82:10: tf.estimator.LinearRegressor: Default value of loss_reduction has been changed to SUM_OVER_BATCH_SIZE; inserting old default value tf.keras.losses.Reduction.SUM.

INFO line 105:2: Renamed 'tf.logging.set_verbosity' to 'tf.compat.v1.logging.set_verbosity'
INFO line 105:27: Renamed 'tf.logging.INFO' to 'tf.compat.v1.logging.INFO'
INFO line 106:2: Renamed 'tf.app.run' to 'tf.compat.v1.app.run'
INFO line 58:10: tf.estimator.LinearRegressor: Default value of loss_reduction has been changed to SUM_OVER_BATCH_SIZE; inserting old default value tf.keras.losses.Reduction.SUM.

INFO line 101:2: Renamed 'tf.logging.set_verbosity' to 'tf.compat.v1.logging.set_verbosity'
INFO line 101:27: Renamed 'tf.logging.INFO' to 'tf.compat.v1.logging.INFO'
INFO line 102:2: Renamed 'tf.app.run' to 'tf.compat.v1.app.run'
WARNING line 125:15: Changing dataset.make_one_shot_iterator() to tf.compat.v1.data.make_one_shot_iterator(dataset). Please check this transformation.

INFO line 72:10: tf.estimator.DNNRegressor: Default value of loss_reduction has been changed to SUM_OVER_BATCH_SIZE; inserting old default value tf.keras.losses.Reduction.SUM.

INFO line 96:2: Renamed 'tf.logging.set_verbosity' to 'tf.compat.v1.logging.set_verbosity'
INFO line 96:27: Renamed 'tf.logging.INFO' to 'tf.compat.v1.logging.INFO'
INFO line 97:2: Renamed 'tf.app.run' to 'tf.compat.v1.app.run'
INFO line 38:8: Renamed 'tf.feature_column.input_layer' to 'tf.compat.v1.feature_column.input_layer'
INFO line 43:10: Renamed 'tf.layers.dense' to 'tf.compat.v1.layers.dense'
INFO line 46:17: Renamed 'tf.layers.dense' to 'tf.compat.v1.layers.dense'
INFO line 57:17: tf.losses.mean_squared_error requires manual check. tf.losses have been replaced with object oriented versions in TF 2.0 and after. The loss function calls have been converted to compat.v1 for backward compatibility. Please update these calls to the TF 2.0 versions.
INFO line 57:17: Renamed 'tf.losses.mean_squared_error' to 'tf.compat.v1.losses.mean_squared_error'
INFO line 61:15: Added keywords to args of function 'tf.shape'
INFO line 62:15: Changed tf.to_float call to tf.cast(..., dtype=tf.float32).
INFO line 65:40: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer'
INFO line 68:39: Renamed 'tf.train.get_global_step' to 'tf.compat.v1.train.get_global_step'
INFO line 83:9: tf.metrics.root_mean_squared_error requires manual check. tf.metrics have been replaced with object oriented versions in TF 2.0 and after. The metric function calls have been converted to compat.v1 for backward compatibility. Please update these calls to the TF 2.0 versions.
INFO line 83:9: Renamed 'tf.metrics.root_mean_squared_error' to 'tf.compat.v1.metrics.root_mean_squared_error'
INFO line 142:23: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer'
INFO line 162:2: Renamed 'tf.logging.set_verbosity' to 'tf.compat.v1.logging.set_verbosity'
INFO line 162:27: Renamed 'tf.logging.INFO' to 'tf.compat.v1.logging.INFO'
INFO line 163:2: Renamed 'tf.app.run' to 'tf.compat.v1.app.run'
INFO line 40:7: Renamed 'tf.test.mock' to 'tf.compat.v1.test.mock'
TensorFlow 2.0 Upgrade Script
-----------------------------
Converted 7 files
Detected 1 issues that require attention
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
File: models/samples/cookbook/regression/automobile_data.py
--------------------------------------------------------------------------------
models/samples/cookbook/regression/automobile_data.py:125:15: WARNING: Changing dataset.make_one_shot_iterator() to tf.compat.v1.data.make_one_shot_iterator(dataset). Please check this transformation.



Make sure to read the detailed log 'tree_report.txt'

สังเกตคำเตือนหนึ่งคำเตือนเกี่ยวกับฟังก์ชัน dataset.make_one_shot_iterator

ตอนนี้สคริปต์ทำงานร่วมกับ TensorFlow 2.0:

โปรดทราบว่าเนื่องจากโมดูล tf.compat.v1 สคริปต์ที่แปลงแล้วจะทำงานใน TensorFlow 1.14 ด้วย

(cd regression_v2 && python custom_regression.py 2>&1) | tail
data = raw_dataframe()
  File "/tmpfs/src/temp/site/en/guide/regression_v2/automobile_data.py", line 67, in raw_dataframe
    dtype=COLUMN_TYPES, na_values="?")
  File "/home/kbuilder/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 686, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 449, in _read
    _validate_names(kwds.get("names", None))
  File "/home/kbuilder/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 417, in _validate_names
    raise ValueError("Names should be an ordered collection.")
ValueError: Names should be an ordered collection.

รายงานโดยละเอียด

สคริปต์ยังรายงานรายการการเปลี่ยนแปลงโดยละเอียด ในตัวอย่างนี้พบการเปลี่ยนแปลงที่อาจไม่ปลอดภัยและมีคำเตือนที่ด้านบนของไฟล์:

head -n 20 tree_report.txt
TensorFlow 2.0 Upgrade Script
-----------------------------
Converted 7 files
Detected 1 issues that require attention
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
File: models/samples/cookbook/regression/automobile_data.py
--------------------------------------------------------------------------------
models/samples/cookbook/regression/automobile_data.py:125:15: WARNING: Changing dataset.make_one_shot_iterator() to tf.compat.v1.data.make_one_shot_iterator(dataset). Please check this transformation.

================================================================================
Detailed log follows:

================================================================================
================================================================================
Input tree: 'models/samples/cookbook/regression/'
================================================================================
--------------------------------------------------------------------------------
Processing file 'models/samples/cookbook/regression/linear_regression_categorical.py'
 outputting to 'regression_v2/linear_regression_categorical.py'

โปรดสังเกตอีกครั้งหนึ่งคำเตือนเกี่ยวกับ Dataset.make_one_shot_iterator function

ในกรณีอื่นผลลัพธ์จะอธิบายเหตุผลของการเปลี่ยนแปลงที่ไม่สำคัญ:

%%writefile dropout.py
import tensorflow as tf

d = tf.nn.dropout(tf.range(10), 0.2)
z = tf.zeros_like(d, optimize=False)
Writing dropout.py
!tf_upgrade_v2 \
  --infile dropout.py \
  --outfile dropout_v2.py \
  --reportfile dropout_report.txt > /dev/null
2020-09-10 01:43:10.977249: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
cat dropout_report.txt
TensorFlow 2.0 Upgrade Script
-----------------------------
Converted 1 files
Detected 0 issues that require attention
--------------------------------------------------------------------------------
================================================================================
Detailed log follows:

================================================================================
--------------------------------------------------------------------------------
Processing file 'dropout.py'
 outputting to 'dropout_v2.py'
--------------------------------------------------------------------------------

3:4: INFO: Changing keep_prob arg of tf.nn.dropout to rate, and recomputing value.

4:4: INFO: Renaming tf.zeros_like to tf.compat.v1.zeros_like because argument optimize is present. tf.zeros_like no longer takes an optimize argument, and behaves as if optimize=True. This call site specifies something other than optimize=True, so it was converted to compat.v1.
--------------------------------------------------------------------------------

นี่คือเนื้อหาไฟล์ที่แก้ไขโปรดสังเกตว่าสคริปต์เพิ่มชื่ออาร์กิวเมนต์เพื่อจัดการกับอาร์กิวเมนต์ที่ย้ายและเปลี่ยนชื่ออย่างไร:

cat dropout_v2.py
import tensorflow as tf

d = tf.nn.dropout(tf.range(10), 1 - (0.2))
z = tf.compat.v1.zeros_like(d, optimize=False)

โครงการขนาดใหญ่อาจมีข้อผิดพลาดเล็กน้อย ตัวอย่างเช่นแปลงโมเดล deeplab:

!tf_upgrade_v2 \
    --intree models/research/deeplab \
    --outtree deeplab_v2 \
    --reportfile deeplab_report.txt > /dev/null
2020-09-10 01:43:13.488610: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1

มันสร้างไฟล์เอาต์พุต:

ls deeplab_v2
README.md   datasets        input_preprocess.py        train.py
__init__.py deeplab_demo.ipynb  local_test.sh          utils
common.py   eval.py         local_test_mobilenetv2.sh  vis.py
common_test.py  export_model.py     model.py
core        g3doc           model_test.py

แต่มีข้อผิดพลาด รายงานจะช่วยคุณระบุสิ่งที่คุณต้องแก้ไขก่อนที่จะทำงาน ข้อผิดพลาดสามข้อแรกมีดังนี้

cat deeplab_report.txt | grep -i models/research/deeplab | grep -i error | head -n 3
models/research/deeplab/export_model.py:25:7: ERROR: Using member tf.contrib.slim in deprecated module tf.contrib. tf.contrib.slim cannot be converted automatically. tf.contrib will not be distributed with TensorFlow 2.0, please consider an alternative in non-contrib TensorFlow, a community-maintained repository such as tensorflow/addons, or fork the required code.
models/research/deeplab/eval.py:28:7: ERROR: Using member tf.contrib.slim in deprecated module tf.contrib. tf.contrib.slim cannot be converted automatically. tf.contrib will not be distributed with TensorFlow 2.0, please consider an alternative in non-contrib TensorFlow, a community-maintained repository such as tensorflow/addons, or fork the required code.
models/research/deeplab/eval.py:146:8: ERROR: Using member tf.contrib.metrics.aggregate_metric_map in deprecated module tf.contrib. tf.contrib.metrics.aggregate_metric_map cannot be converted automatically. tf.contrib will not be distributed with TensorFlow 2.0, please consider an alternative in non-contrib TensorFlow, a community-maintained repository such as tensorflow/addons, or fork the required code.

โหมด "ปลอดภัย"

สคริปต์การแปลงยังมีโหมด SAFETY รุกรานน้อยซึ่งเพียงแค่เปลี่ยนการนำเข้าเพื่อใช้โมดูล tensorflow.compat.v1 :

cat dropout.py
import tensorflow as tf

d = tf.nn.dropout(tf.range(10), 0.2)
z = tf.zeros_like(d, optimize=False)
tf_upgrade_v2 --mode SAFETY --infile dropout.py --outfile dropout_v2_safe.py > /dev/null
2020-09-10 01:43:17.892207: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
cat dropout_v2_safe.py
import tensorflow.compat.v1 as tf

d = tf.nn.dropout(tf.range(10), 0.2)
z = tf.zeros_like(d, optimize=False)

อย่างที่คุณเห็นสิ่งนี้ไม่ได้อัปเกรดรหัสของคุณ แต่อนุญาตให้รหัส TensorFlow 1 ทำงานใน TensorFlow 2

ข้อควรระวัง

  • อย่าอัปเดตบางส่วนของโค้ดของคุณด้วยตนเองก่อนที่จะเรียกใช้สคริปต์นี้ โดยเฉพาะอย่างยิ่งฟังก์ชันที่มีการเรียงลำดับอาร์กิวเมนต์ใหม่เช่น tf.argmax หรือ tf.batch_to_space ทำให้สคริปต์เพิ่มอาร์กิวเมนต์คำหลักไม่ถูกต้องซึ่งไม่ตรงกับรหัสที่มีอยู่ของคุณ

  • สคริปต์อนุมานว่า tensorflow ถูกอิมพอร์ตโดยใช้ import tensorflow as tf

  • สคริปต์นี้ไม่ได้เรียงลำดับอาร์กิวเมนต์ใหม่ สคริปต์จะเพิ่มอาร์กิวเมนต์คีย์เวิร์ดให้กับฟังก์ชันที่มีการเรียงลำดับอาร์กิวเมนต์ใหม่แทน

  • ตรวจสอบ tf2up.ml สำหรับเครื่องมือที่สะดวกในการอัพเกรดสมุดบันทึก Jupyter และไฟล์ Python ในที่เก็บ GitHub

หากต้องการรายงานข้อบกพร่องของสคริปต์การอัปเกรดหรือร้องขอคุณสมบัติโปรดส่งปัญหาเกี่ยวกับ GitHub และหากคุณกำลังทดสอบ TensorFlow 2.0 เราอยากได้ยินเกี่ยวกับเรื่องนี้! เข้าร่วม ชุมชนการทดสอบ TF 2.0 และส่งคำถามและการอภิปรายไปที่ testing@tensorflow.org