التلقائي رمز الترقية إلى TensorFlow 2



توفر المواد ترجمة للدليل للتحديث التلقائي للرمز من TensorFlow 1.x إلى Tensorflow 2 باستخدام البرنامج النصي للتحديث tf_upgrade_v2 .

يتضمن TensorFlow 2.0 العديد من تغييرات واجهة برمجة التطبيقات ، مثل تغيير ترتيب الوسائط ، وإعادة تسمية الحروف ، وتغيير القيم الافتراضية للمعلمات. التصحيح اليدوي لجميع هذه التعديلات مملة وعرضة للخطأ. لتبسيط التغييرات وجعل الانتقال إلى TF 2.0 أكثر سلاسة قدر الإمكان ، أنشأ فريق tf_upgrade_v2 الأداة المساعدة tf_upgrade_v2 للمساعدة في الانتقال من الكود القديم إلى API الجديد.
ملاحظة: tf_upgrade_v2 تثبيت tf_upgrade_v2 تلقائيًا لـ TensorFlow 1.13 والإصدارات الأحدث (بما في ذلك جميع إصدارات TF 2.0).
الاستخدام النموذجي للبرنامج النصي يشبه هذا:

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

يعمل هذا الرمز على تسريع عملية الترقية من خلال تحويل البرامج النصية الموجودة في TensorFlow 1.x Python إلى TensorFlow 2.0.

يعمل برنامج التحويل النصي على أتمتة العملية قدر الإمكان ، ولكن لا تزال هناك تغييرات في الأسلوبية والأسلوبية لا يمكن إصلاحها بواسطة البرنامج النصي.

وحدات التوافق


لا يمكن تحديث بعض أحرف واجهة برمجة التطبيقات ببساطة باستخدام استبدال السلسلة. لضمان عمل التعليمات البرمجية في TensorFlow 2.0 ، يتضمن البرنامج النصي compat.v1 الوحدة النمطية compat.v1 . تستبدل هذه الوحدة النمطية أحرف 1.x TF ، مثل tf.foo ، tf.foo المكافئ tf.compat.v1.foo . على الرغم من أن وحدة التوافق جيدة ، إلا أننا نوصيك بطرح البدائل يدويًا وترحيلها إلى واجهات برمجة التطبيقات الجديدة في مساحة اسم tf. * tf. * بدلاً من مساحة الاسم tf.compat.v1 أسرع وقت ممكن.

بسبب انخفاض قيمة وحدات TensorFlow 2.x (مثل tf.flags و tf.contrib ) ، لا يمكن تجاوز بعض التغييرات من خلال التبديل إلى compat.v1 . قد يتطلب تحديث هذا الرمز استخدام مكتبة إضافية (على سبيل المثال ، absl.flags أو التبديل إلى حزمة في tenorflow/addons .

عملية التحديث الموصى بها


يوضح هذا الجزء من الدليل استخدام البرنامج النصي للتحديث. على الرغم من أن برنامج التحديث سهل الاستخدام ، إلا أننا نوصي بشدة باستخدام البرنامج النصي كجزء من العملية التالية:

  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 على شجرة المصدر بالكامل بما في ذلك الاختبارات. سيؤدي هذا إلى تحديث التعليمات البرمجية الخاصة بك إلى تنسيق يستخدم فقط الأحرف المتوفرة في TensorFlow 2.0. ستتوفر الأحرف القديمة من tf.compat.v1 . سيتطلبون فيما بعد المعالجة اليدوية. \ N "،
  5. قم بإجراء الاختبارات المحولة باستخدام TensorFlow 1.14 : لا يزال يجب تشغيل التعليمات البرمجية الخاصة بك بشكل صحيح في TensorFlow 1.14. قم بإجراء اختبارات الوحدة مرة أخرى. يعني أي خطأ في اختباراتك في هذه المرحلة وجود خطأ في البرنامج النصي للتحديث.
  6. تحقق من تقرير التحديث للحصول على تحذيرات وأخطاء : يكتب البرنامج النصي ملف تقرير يشرح جميع التحويلات التي تحتاج إلى التحقق منها مرتين ، أو كل الإجراءات التي يلزم إجراؤها يدويًا. على سبيل المثال: تتطلب أي نسخ مشاركة متبقية إزالة يدوية.
  7. تثبيت TensorFlow 2.0 : في هذه المرحلة ، يجب أن يكون التبديل إلى TensorFlow 2.0 آمنًا.
  8. اختبار الكود باستخدام v1.disable_v2_behavior : أعد تشغيل اختباراتك باستخدام v1.disable_v2_behavior() في وظيفة الاختبار الرئيسية ، ويجب أن تكون النتائج كما هي عند التشغيل تحت 1.14.
  9. تمكين V2 Behavior : الآن وبعد تشغيل اختباراتك باستخدام v2 API ، يمكنك البدء في مشاهدة تضمين v2 behavior . اعتمادًا على كيفية كتابة الكود ، قد يتطلب ذلك بعض التغييرات.

باستخدام البرنامج النصي التحديث


تركيب


 from __future__ import absolute_import, division, print_function, unicode_literals 

 try: import tensorflow.compat.v2 as tf except Exception: pass tf.enable_v2_behavior() print(tf.__version__) 

قم بنسخ مستودع tensorflow / models بحيث يكون لديك بعض الأكواد للتجريب:

 !git clone --branch r1.13.0 --depth 1 https://github.com/tensorflow/models 

قراءة المساعدة


يجب تثبيت البرنامج النصي مع TensorFlow. تسمى المساعدة المضمنة مثل هذا:

 !tf_upgrade_v2 -h 

مثال رمز TF1


فيما يلي برنامج نصي بسيط TensorFlow 1.0 لا يعمل على TensorFlow 2.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) 

إعطاء الخطأ التالي:

 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 

سيعرض البرنامج النصي أخطاء إذا لم يتمكن من العثور على تصحيحات للرمز.

 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' 

شجرة الدليل


تستخدم المشروعات النموذجية ، بما في ذلك هذا المثال البسيط ، أكثر من ملف واحد. عادةً ما تريد تحديث الحزمة بالكامل ، بحيث يمكن أيضًا تشغيل البرنامج النصي على شجرة الدليل:

 #   .py      outtree !tf_upgrade_v2 \ --intree models/samples/cookbook/regression/ \ --outtree regression_v2/ \ --reportfile tree_report.txt 

انتبه إلى ملاحظة واحدة حول الوظيفة
 dataset.make_one_shot_iterator 
.

الآن يعمل البرنامج النصي بالفعل مع TensorFlow 2.0.

لاحظ أنه نظرًا للوحدة النمطية "tf.compat.v1" ، سيتم أيضًا تشغيل البرنامج النصي المحول في TensorFlow 1.14.

تقرير مفصل


ينشر البرنامج النصي أيضًا قائمة مفصلة بالتغييرات. في هذا المثال ، وجد تحولا غير آمن وربما أضاف تحذيرًا إلى أعلى الملف:

 !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/custom_regression.py' outputting to 'regression_v2/custom_regression.py' 

انتبه مرة أخرى لملاحظة واحدة حول Dataset.make_one_shot_iterator function .

الوضع الآمن


يحتوي البرنامج النصي للتحويل أيضًا على وضع "SECURE" أقل tensorflow.compat.v1 يغير الواردات ببساطة لاستخدام وحدة tensorflow.compat.v1 .

 !tf_upgrade_v2 --mode SAFETY --infile dropout.py --outfile dropout_v2_safe.py > /dev/null 

على سبيل المثال رمز:

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


في هذا الوضع يتم تحويله إلى ما يلي:

 import tensorflow.compat.v1 as tf tf.disable_v2_behavior() d = tf.nn.dropout(tf.range(10), 0.2) z = tf.zeros_like(d, optimize=False) 

كما ترون ، لم يتم تحديث الكود الخاص بك ، ولكن الآن يتم تشغيل الكود TensorFlow 1 في TensorFlow 2.

التحذيرات


  • لا تقم بتحديث أجزاء من التعليمات البرمجية يدويًا قبل تشغيل البرنامج النصي. على وجه الخصوص ، tf.argmax الدالات ذات الوسائط التي تم إعادة ترتيبها ، مثل tf.argmax أو tf.batch_to_space ، البرنامج النصي على إضافة وسيطات الكلمات الرئيسية بشكل غير صحيح ، مما سيؤدي إلى إرباك الشفرة الحالية.
  • يفترض البرنامج النصي أنه tensorflow import tensorflow as tf باستخدام import tensorflow as tf
  • البرنامج النصي لا يعيد ترتيب الوسائط. بدلاً من ذلك ، يضيف البرنامج النصي الكلمات الأساسية للوسائط إلى الوظائف التي يتم فيها عكس الوسائط.

بعد التحقق ، ستظهر الترجمة أيضًا على Tensorflow.org. إذا كنت ترغب في المشاركة في ترجمة وثائق موقع Tensorflow.org إلى اللغة الروسية ، يرجى الاتصال في رسالة شخصية أو تعليقات. هي موضع تقدير أي تصحيحات أو تعليقات.

Source: https://habr.com/ru/post/ar483184/


All Articles