بازنویسی خودکار نمادهای API TF 1.x و compat.v1

مشاهده در TensorFlow.org در Google Colab اجرا شود مشاهده منبع در GitHub دانلود دفترچه یادداشت

TensorFlow 2.x شامل بسیاری از تغییرات API از TF 1.x و tf.compat.v1 API است، مانند مرتب کردن مجدد آرگومان ها، تغییر نام نمادها، و تغییر مقادیر پیش فرض برای پارامترها. انجام دستی همه این اصلاحات خسته کننده و مستعد خطا خواهد بود. تیم TensorFlow برای ساده کردن تغییرات، و انتقال شما به TF 2.x تا حد امکان یکپارچه، ابزار tf_upgrade_v2 را برای کمک به انتقال کدهای قدیمی به API جدید ایجاد کرده است.

استفاده معمولی به این صورت است:

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

با تبدیل اسکریپت های موجود TensorFlow 1.x Python به TensorFlow 2.x، روند ارتقای شما را تسریع می کند.

اسکریپت تبدیل بسیاری از تبدیل‌های API مکانیکی را خودکار می‌کند، اگرچه بسیاری از API‌ها را نمی‌توان به طور خودکار منتقل کرد. همچنین قادر به سازگاری کامل کد شما با رفتارهای TF2 و API ها نیست. بنابراین، این تنها بخشی از سفر مهاجرت شماست.

ماژول های سازگاری

برخی از نمادهای API را نمی توان به سادگی با استفاده از جایگزینی رشته ارتقا داد. مواردی که نمی توانند به طور خودکار ارتقاء یابند، به مکان هایشان در ماژول compat.v1 می شوند. این ماژول نمادهای TF 1.x مانند tf.foo را با مرجع tf.compat.v1.foo معادل جایگزین می کند. اگر قبلاً از APIهای compat.v1 با وارد کردن TF از طریق import tensorflow.compat.v1 as tf استفاده می‌کنید، اسکریپت tf_upgrade_v2 در صورت امکان سعی می‌کند این کاربردها را به APIهای غیر سازگار تبدیل کند. توجه داشته باشید که در حالی که برخی از APIهای compat.v1 با رفتارهای TF2.x سازگار هستند، بسیاری از آنها سازگار نیستند. بنابراین، توصیه می‌کنیم جایگزین‌ها را به‌صورت دستی تصحیح کرده و در اسرع وقت به جای فضای نام tf.compat.v1 به APIهای جدید در فضای نام tf.* منتقل کنید.

به دلیل منسوخ شدن ماژول TensorFlow 2.x (به عنوان مثال، tf.flags و tf.contrib )، برخی از تغییرات را نمی توان با تغییر به compat.v1 انجام داد. ارتقای این کد ممکن است نیاز به استفاده از یک کتابخانه اضافی (به عنوان مثال، absl.flags ) یا تغییر به یک بسته در tensorflow/addons داشته باشد.

بقیه این راهنما نحوه استفاده از اسکریپت بازنویسی نماد را نشان می دهد. در حالی که استفاده از اسکریپت آسان است، اکیداً توصیه می شود که از اسکریپت به عنوان بخشی از فرآیند زیر استفاده کنید:

  1. تست واحد : مطمئن شوید که کدی که ارتقا می‌دهید دارای مجموعه تست واحد با پوشش معقول است. این کد پایتون است، بنابراین زبان از شما در برابر بسیاری از اشتباهات محافظت نمی کند. همچنین اطمینان حاصل کنید که هر وابستگی قبلاً برای سازگاری با TensorFlow 2.x ارتقا یافته است.

  2. نصب TensorFlow 1.15 : TensorFlow خود را به آخرین نسخه TensorFlow 1.x، حداقل 1.15 ارتقا دهید. این شامل آخرین API TensorFlow 2.0 در tf.compat.v2 است.

  3. تست با 1.15 : اطمینان حاصل کنید که آزمون های واحد شما در این مرحله موفق شده اند. در حین ارتقا، آنها را به طور مکرر اجرا خواهید کرد، بنابراین شروع از رنگ سبز مهم است.

  4. اسکریپت ارتقا را اجرا کنید: tf_upgrade_v2 را روی کل درخت منبع خود اجرا کنید، شامل تست‌ها نیز می‌شود. این کد شما را به قالبی ارتقا می‌دهد که فقط از نمادهای موجود در TensorFlow 2.0 استفاده می‌کند. نمادهای منسوخ شده با tf.compat.v1 قابل دسترسی خواهند بود. اینها در نهایت نیاز به توجه دستی دارند، اما نه فورا.

  5. تست های تبدیل شده را با TensorFlow 1.15 اجرا کنید: کد شما همچنان باید در TensorFlow 1.15 به خوبی اجرا شود. تست های واحد خود را دوباره اجرا کنید. هر گونه خطا در تست های شما در اینجا به این معنی است که یک اشکال در اسکریپت ارتقا وجود دارد. لطفا به ما اطلاع دهید .

  6. گزارش ارتقا را برای هشدارها و خطاها بررسی کنید: اسکریپت یک فایل گزارش می‌نویسد که هر تبدیلی را که باید دوباره بررسی کنید یا هر اقدام دستی را که باید انجام دهید توضیح می‌دهد. به عنوان مثال: هر نمونه باقیمانده از مشارکت به اقدام دستی برای حذف نیاز دارد. لطفاً برای دستورالعمل های بیشتر با RFC مشورت کنید.

  7. نصب TensorFlow 2.x : در این مرحله، جابجایی به باینری‌های TensorFlow 2.x باید ایمن باشد، حتی اگر با رفتارهای قدیمی اجرا می‌کنید.

  8. تست با v1.disable_v2_behavior : اجرای مجدد تست‌های خود با v1.disable_v2_behavior() در تابع اصلی تست‌ها باید نتایجی مشابه با اجرای زیر 1.15 داشته باشد.

  9. فعال کردن رفتار V2 : اکنون که آزمایش‌های شما با استفاده از باینری‌های TF2 کار می‌کنند، اکنون می‌توانید انتقال کد خود را برای اجتناب از tf.estimator و تنها با استفاده از رفتارهای پشتیبانی‌شده TF2 (بدون غیرفعال کردن رفتار TF2) آغاز کنید. برای جزئیات بیشتر به راهنمای مهاجرت مراجعه کنید.

با استفاده از اسکریپت بازنویسی نماد tf_upgrade_v2

برپایی

قبل از شروع مطمئن شوید که TensorFlow 2.x نصب شده است.

import tensorflow as tf

print(tf.__version__)
2.6.0

مخزن tensorflow/models 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% (2428/2428), done.[K
remote: Total 2927 (delta 504), reused 2113 (delta 424), pack-reused 0[K
Receiving objects: 100% (2927/2927), 369.04 MiB | 27.58 MiB/s, done.
Resolving deltas: 100% (504/504), done.
Checking out files: 100% (2768/2768), done.

راهنما را بخوانید

اسکریپت باید با TensorFlow نصب شود. در اینجا راهنمای داخلی است:

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] [--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.x اجرا نمی شود:

(cd models/samples/cookbook/regression && python custom_regression.py)
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'

تک فایل

اسکریپت را می توان روی یک فایل پایتون اجرا کرد:

!tf_upgrade_v2 \
  --infile models/samples/cookbook/regression/custom_regression.py \
  --outfile /tmp/custom_regression_v2.py
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'

اسکریپت اگر نتواند راه حلی برای کد پیدا کند خطاهای چاپی را نشان می دهد.

درخت دایرکتوری

پروژه های معمولی، از جمله این مثال ساده، از بیش از یک فایل استفاده می کنند. معمولاً می خواهید یک بسته کامل را به روز کنید، بنابراین اسکریپت می تواند روی درخت دایرکتوری نیز اجرا شود:

# update 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
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 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 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'
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'
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 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.x کار می کند:

توجه داشته باشید که چون ماژول tf.compat.v1 در TF 1.15 گنجانده شده است، اسکریپت تبدیل شده نیز در TensorFlow 1.15 اجرا خواهد شد.

(cd regression_v2 && python custom_regression.py 2>&1) | tail
I0922 22:16:42.778216 140254758430528 estimator.py:2074] Saving dict for global step 1000: global_step = 1000, loss = 651.5428, rmse = 3.684265
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 1000: /tmp/tmpk2_4r192/model.ckpt-1000
I0922 22:16:42.817190 140254758430528 estimator.py:2135] Saving 'checkpoint_path' summary for global step 1000: /tmp/tmpk2_4r192/model.ckpt-1000
Tensor("IteratorGetNext:25", shape=(None,), dtype=float64, device=/device:CPU:0)
Tensor("Squeeze:0", shape=(None,), dtype=float32)

********************************************************************************

RMS error for the test set: $3684

گزارش تفصیلی

اسکریپت همچنین فهرستی از تغییرات دقیق را گزارش می دهد. در این مثال، یک تبدیل احتمالاً ناامن را پیدا کرد و یک هشدار در بالای فایل قرار داد:

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/__init__.py'
 outputting to 'regression_v2/__init__.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
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), rate=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

فایل های خروجی را تولید کرد:

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/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.
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.

حالت "ایمنی".

اسکریپت تبدیل همچنین دارای یک حالت 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
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 2.x استفاده می کند!

هشدارها

  • قبل از اجرای این اسکریپت، بخش هایی از کد خود را به صورت دستی به روز نکنید. به طور خاص، توابعی که آرگومان‌هایی مانند tf.argmax یا tf.batch_to_space را مرتب کرده‌اند، باعث می‌شوند اسکریپت به اشتباه آرگومان‌های کلیدواژه‌ای را اضافه کند که کد موجود شما را به اشتباه نشان می‌دهد.

  • اسکریپت فرض می کند که tensorflow با استفاده از import tensorflow as tf یا import tensorflow.compat.v1 as tf .

  • این اسکریپت آرگومان ها را دوباره ترتیب نمی دهد. در عوض، اسکریپت آرگومان های کلیدواژه را به توابعی اضافه می کند که آرگومان هایشان مرتب شده است.

  • برای ابزاری مناسب برای ارتقای نوت‌بوک‌های Jupyter و فایل‌های Python در یک مخزن GitHub، tf2up.ml را بررسی کنید.

برای گزارش اشکالات اسکریپت ارتقا یا درخواست ویژگی، لطفاً یک مشکل را در GitHub ثبت کنید.