TF1.x -> نظرة عامة على الهجرة TF2

يختلف 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

قبل الترحيل، تعرف على السلوك والاختلافات بين واجهة برمجة التطبيقات (API) بين TF1.x وTF2 من خلال قراءة الدليل .

  1. قم بتشغيل البرنامج النصي الآلي لتحويل بعض استخدامات واجهة برمجة التطبيقات TF1.x إلى tf.compat.v1 .
  2. قم بإزالة رموز tf.contrib القديمة (راجع TF Addons و TF-Slim ).
  3. اجعل تمريرات الأمام لنموذج TF1.x تعمل في TF2 مع تمكين التنفيذ المتحمّس.
  4. قم بترقية كود TF1.x الخاص بك لحلقات التدريب ونماذج الحفظ/التحميل إلى مكافئات TF2.
  5. (اختياري) قم بترحيل واجهات برمجة التطبيقات 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 لمعرفة المزيد.

,

يختلف 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

قبل الترحيل، تعرف على السلوك والاختلافات بين واجهة برمجة التطبيقات (API) بين TF1.x وTF2 من خلال قراءة الدليل .

  1. قم بتشغيل البرنامج النصي الآلي لتحويل بعض استخدامات واجهة برمجة التطبيقات TF1.x إلى tf.compat.v1 .
  2. قم بإزالة رموز tf.contrib القديمة (راجع TF Addons و TF-Slim ).
  3. اجعل تمريرات الأمام لنموذج TF1.x تعمل في TF2 مع تمكين التنفيذ المتحمّس.
  4. قم بترقية كود TF1.x الخاص بك لحلقات التدريب ونماذج الحفظ/التحميل إلى مكافئات TF2.
  5. (اختياري) قم بترحيل واجهات برمجة التطبيقات 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 لمعرفة المزيد.