يختلف TensorFlow 2 بشكل أساسي عن TF1.x بعدة طرق. لا يزال بإمكانك تشغيل كود TF1.x غير المعدل ( باستثناء contrib ) مقابل عمليات التثبيت الثنائية TF2 كما يلي:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
ومع ذلك، لا يقوم هذا بتشغيل سلوكيات TF2 وواجهات برمجة التطبيقات، وقد لا يعمل كما هو متوقع مع التعليمات البرمجية المكتوبة لـ TF2. إذا لم تكن تقوم بالتشغيل مع سلوكيات TF2 النشطة، فإنك تقوم بتشغيل TF1.x بشكل فعال أعلى تثبيت TF2. اقرأ دليل سلوكيات TF1 vs TF2 للحصول على مزيد من التفاصيل حول كيفية اختلاف TF2 عن TF1.x.
يقدم هذا الدليل نظرة عامة على عملية ترحيل كود TF1.x الخاص بك إلى TF2. يمكّنك هذا من الاستفادة من تحسينات الميزات الجديدة والمستقبلية وأيضًا جعل التعليمات البرمجية الخاصة بك أبسط وأكثر أداءً وأسهل في الصيانة.
إذا كنت تستخدم واجهات برمجة التطبيقات عالية المستوى الخاصة بـ tf.keras
وتتدرب حصريًا مع model.fit
، فيجب أن تكون شفرتك متوافقة تمامًا مع TF2 باستثناء التحذيرات التالية:
- يحتوي TF2 على معدلات تعلم افتراضية جديدة لمحسني Keras.
- ربما قام TF2 بتغيير "الاسم" الذي يتم تسجيل المقاييس إليه.
عملية ترحيل TF2
قبل الترحيل، تعرف على السلوك والاختلافات بين واجهة برمجة التطبيقات (API) بين TF1.x وTF2 من خلال قراءة الدليل .
- قم بتشغيل البرنامج النصي الآلي لتحويل بعض استخدامات واجهة برمجة التطبيقات TF1.x إلى
tf.compat.v1
. - قم بإزالة رموز
tf.contrib
القديمة (راجع TF Addons و TF-Slim ). - اجعل تمريرات الأمام لنموذج TF1.x تعمل في TF2 مع تمكين التنفيذ المتحمّس.
- قم بترقية كود TF1.x الخاص بك لحلقات التدريب ونماذج الحفظ/التحميل إلى مكافئات TF2.
- (اختياري) قم بترحيل واجهات برمجة التطبيقات
tf.compat.v1
المتوافقة مع TF2 إلى واجهات برمجة التطبيقات TF2 الاصطلاحية.
تتوسع الأقسام التالية بناءً على الخطوات الموضحة أعلاه.
قم بتشغيل البرنامج النصي لتحويل الرمز
يؤدي هذا إلى تنفيذ تمريرة أولية عند إعادة كتابة رموز التعليمات البرمجية الخاصة بك لتشغيلها على ثنائيات TF 2.x، ولكنه لن يجعل التعليمات البرمجية الخاصة بك اصطلاحيًا مع TF 2.x ولن يجعل التعليمات البرمجية الخاصة بك متوافقة تلقائيًا مع سلوكيات TF2.
من المرجح أن تستمر التعليمات البرمجية الخاصة بك في استخدام نقاط النهاية tf.compat.v1
للوصول إلى العناصر النائبة والجلسات والمجموعات والوظائف الأخرى على نمط TF1.x.
اقرأ الدليل لمعرفة المزيد حول أفضل الممارسات لاستخدام البرنامج النصي لتحويل الرموز.
إزالة استخدام tf.contrib
تم إيقاف تشغيل وحدة tf.contrib
وتم دمج العديد من وحداتها الفرعية في واجهة برمجة تطبيقات TF2 الأساسية. تم الآن تحويل الوحدات الفرعية الأخرى إلى مشاريع أخرى مثل TF IO و TF Addons .
يستخدم قدر كبير من كود TF1.x الأقدم مكتبة Slim ، والتي تم تجميعها مع TF1.x كـ tf.contrib.layers
. عند ترحيل كود Slim الخاص بك إلى TF2، قم بتبديل استخدامات Slim API الخاصة بك للإشارة إلى حزمة tf-slim pip . بعد ذلك، اقرأ دليل تعيين النموذج لمعرفة كيفية تحويل كود Slim.
وبدلاً من ذلك، إذا كنت تستخدم نماذج Slim المدربة مسبقًا، فقد تفكر في تجربة نماذج Keras المعدة مسبقًا من tf.keras.applications
أو TF2 SavedModel
s الخاص بـ TF Hub والتي تم تصديرها من كود Slim الأصلي.
تشغيل التمريرات الأمامية لنموذج TF1.x مع تمكين سلوكيات TF2
تتبع المتغيرات والخسائر
TF2 لا يدعم المجموعات العالمية.
لا يدعم التنفيذ السريع في TF2 واجهات برمجة التطبيقات المستندة إلى مجموعة tf.Graph
. يؤثر هذا على كيفية إنشاء المتغيرات وتتبعها.
بالنسبة إلى كود TF2 الجديد، يمكنك استخدام tf.Variable
بدلاً من v1.get_variable
واستخدام كائنات Python لتجميع وتتبع المتغيرات بدلاً من tf.compat.v1.variable_scope
. عادةً ما يكون هذا واحدًا مما يلي:
تجميع قوائم المتغيرات (مثل tf.Graph.get_collection(tf.GraphKeys.VARIABLES)
) مع سمات .variables
و .trainable_variables
لكائنات Layer
أو Module
أو Model
.
تطبق فئتا Layer
Model
العديد من الخصائص الأخرى التي تلغي الحاجة إلى المجموعات العامة. يمكن أن تكون خاصية .losses
الخاصة بهم بديلاً لاستخدام مجموعة tf.GraphKeys.LOSSES
.
اقرأ دليل تعيين النموذج لمعرفة المزيد حول استخدام حشوات نمذجة التعليمات البرمجية TF2 لتضمين التعليمات البرمجية القائمة على get_variable
و variable_scope
داخل Layers
Models
Modules
. سيتيح لك ذلك تنفيذ التمريرات الأمامية مع تمكين التنفيذ المتحمّس دون إعادة كتابة كبيرة.
التكيف مع التغيرات السلوكية الأخرى
إذا لم يكن دليل تعيين النموذج كافيًا لدفع نموذجك إلى الأمام لتمرير تغييرات سلوكية أخرى قد تتضمن مزيدًا من التفاصيل، فراجع الدليل الخاص بسلوكيات TF1.x مقابل TF2 للتعرف على تغييرات السلوك الأخرى وكيف يمكنك التكيف معها . تحقق أيضًا من إنشاء طبقات ونماذج جديدة عبر دليل التصنيف الفرعي للحصول على التفاصيل.
التحقق من صحة النتائج الخاصة بك
راجع دليل التحقق من صحة النموذج للحصول على أدوات وإرشادات سهلة حول كيفية التحقق (رقميًا) من أن النموذج الخاص بك يعمل بشكل صحيح عند تمكين التنفيذ المتحمس. قد تجد هذا مفيدًا بشكل خاص عند إقرانه بدليل تعيين النموذج .
ترقية التدريب والتقييم ورمز الاستيراد/التصدير
حلقات التدريب TF1.x التي تم إنشاؤها باستخدام أسلوب v1.Session
tf.estimator.Estimator
والأساليب الأخرى القائمة على المجموعات غير متوافقة مع السلوكيات الجديدة لـ TF2. من المهم أن تقوم بترحيل جميع أكواد التدريب الخاصة بـ TF1.x لأن دمجها مع كود TF2 يمكن أن يتسبب في سلوكيات غير متوقعة.
يمكنك الاختيار من بين عدة استراتيجيات للقيام بذلك.
النهج الأعلى مستوى هو استخدام tf.keras
. تدير الوظائف عالية المستوى في Keras الكثير من التفاصيل ذات المستوى المنخفض التي قد يكون من السهل تفويتها إذا كتبت حلقة التدريب الخاصة بك. على سبيل المثال، يقومون تلقائيًا بجمع خسائر التنظيم، وتعيين وسيطة training=True
عند استدعاء النموذج.
ارجع إلى دليل ترحيل Estimator لمعرفة كيفية ترحيل كود tf.estimator.Estimator
لاستخدام Vanilla وحلقات تدريب tf.keras
المخصصة .
تمنحك حلقات التدريب المخصصة تحكمًا أفضل في النموذج الخاص بك مثل تتبع أوزان الطبقات الفردية. اقرأ الدليل الخاص ببناء حلقات التدريب من البداية لتتعرف على كيفية استخدام tf.GradientTape
لاسترداد أوزان النموذج واستخدامها لتحديث النموذج.
تحويل محسنات TF1.x إلى محسنات Keras
أدوات التحسين في tf.compat.v1.train
، مثل مُحسِّن Adam ومُحسِّن النزول المتدرج ، لها مكافئات في tf.keras.optimizers
.
يلخص الجدول أدناه كيف يمكنك تحويل أدوات التحسين القديمة هذه إلى مكافئاتها من Keras. يمكنك استبدال إصدار TF1.x مباشرة بإصدار TF2 ما لم تكن هناك حاجة إلى خطوات إضافية (مثل تحديث معدل التعلم الافتراضي ).
لاحظ أن تحويل أدوات التحسين الخاصة بك قد يجعل نقاط التفتيش القديمة غير متوافقة .
TF1.x | TF2 | خطوات إضافية |
---|---|---|
`tf.v1.train.GradientDescentOptimizer` | tf.keras.optimizers.SGD | لا أحد |
`tf.v1.train.MomentumOptimizer` | tf.keras.optimizers.SGD | قم بتضمين حجة "الزخم". |
`tf.v1.train.AdamOptimizer` | tf.keras.optimizers.Adam | إعادة تسمية الوسيطتين `beta1` و`beta2` إلى `beta_1` و`beta_2` |
`tf.v1.train.RMSPropOptimizer` | tf.keras.optimizers.RMSprop | أعد تسمية الوسيطة "decay" إلى "rho". |
`tf.v1.train.AdadeltaOptimizer` | tf.keras.optimizers.Adadelta | لا أحد |
`tf.v1.train.AdagradOptimizer` | tf.keras.optimizers.Adagrad | لا أحد |
`tf.v1.train.FtrlOptimizer` | tf.keras.optimizers.Ftrl | قم بإزالة الوسيطتين "accum_name" و"linear_name". |
"tf.contrib.AdamaxOptimizer". | tf.keras.optimizers.Adamax | أعد تسمية الوسيطتين `beta1` و`beta2` إلى `beta_1` و`beta_2` |
`tf.contrib.Nadam` | tf.keras.optimizers.Nadam | أعد تسمية الوسيطتين `beta1` و`beta2` إلى `beta_1` و`beta_2` |
ترقية خطوط أنابيب إدخال البيانات
هناك طرق عديدة لتغذية نموذج tf.keras
بالبيانات. سيقبلون مولدات Python ومصفوفات Numpy كمدخلات.
الطريقة الموصى بها لتغذية النموذج بالبيانات هي استخدام حزمة tf.data
، التي تحتوي على مجموعة من الفئات عالية الأداء لمعالجة البيانات. تتميز dataset
التي تنتمي إلى tf.data
بالكفاءة والتعبير وتتكامل بشكل جيد مع TF2.
ويمكن تمريرها مباشرة إلى الأسلوب tf.keras.Model.fit
.
model.fit(dataset, epochs=5)
يمكن تكرارها عبر لغة بايثون القياسية مباشرةً:
for example_batch, label_batch in dataset:
break
إذا كنت لا تزال تستخدم tf.queue
، فهي الآن مدعومة فقط كهياكل بيانات، وليس كمسارات إدخال.
يجب عليك أيضًا ترحيل جميع أكواد المعالجة المسبقة للميزات التي تستخدم tf.feature_columns
. اقرأ دليل الترحيل لمزيد من التفاصيل.
حفظ وتحميل النماذج
يستخدم TF2 نقاط التفتيش القائمة على الكائنات. اقرأ دليل ترحيل نقاط التفتيش لمعرفة المزيد حول ترحيل نقاط فحص TF1.x المستندة إلى الاسم. اقرأ أيضًا دليل نقاط التفتيش في مستندات TensorFlow الأساسية.
لا توجد مخاوف كبيرة تتعلق بالتوافق بالنسبة للنماذج المحفوظة. اقرأ دليل SavedModel
لمزيد من المعلومات حول ترحيل SavedModel
s في TF1.x إلى TF2. على العموم،
- تعمل نماذج TF1.x المحفوظة في TF2.
- تعمل نماذج TF2 المحفوظة في TF1.x إذا كانت كافة العمليات مدعومة.
راجع أيضًا قسم GraphDef
في دليل ترحيل SavedModel
لمزيد من المعلومات حول العمل مع كائنات Graph.pb
و Graph.pbtxt
.
(اختياري) قم بترحيل رموز tf.compat.v1
تحتوي وحدة tf.compat.v1
على واجهة برمجة تطبيقات TF1.x الكاملة، مع دلالاتها الأصلية.
حتى بعد اتباع الخطوات المذكورة أعلاه والانتهاء برمز متوافق تمامًا مع جميع سلوكيات TF2، فمن المحتمل أن يكون هناك العديد من الإشارات إلى واجهة برمجة التطبيقات compat.v1
التي تتوافق مع TF2. يجب عليك تجنب استخدام واجهات برمجة التطبيقات compat.v1
القديمة هذه لأي تعليمات برمجية جديدة تكتبها، على الرغم من أنها ستستمر في العمل مع التعليمات البرمجية المكتوبة بالفعل.
ومع ذلك، يمكنك اختيار ترحيل الاستخدامات الحالية إلى واجهات برمجة تطبيقات TF2 غير القديمة. غالبًا ما تشرح مستندات رموز compat.v1
الفردية كيفية ترحيلها إلى واجهات برمجة تطبيقات TF2 غير القديمة. بالإضافة إلى ذلك، قد يساعد قسم دليل تعيين النموذج حول الترحيل المتزايد إلى واجهات برمجة تطبيقات TF2 الاصطلاحية في هذا أيضًا.
الموارد ومزيد من القراءة
كما ذكرنا سابقًا، من الممارسات الجيدة ترحيل كل كود TF1.x الخاص بك إلى TF2. اقرأ الأدلة الموجودة في قسم الترحيل إلى TF2 في دليل TensorFlow لمعرفة المزيد.