المشاكل الشائعة

إذا لم تكن مشكلتك مدرجة هنا، فيرجى البحث في مشكلات جيثب قبل ملء مشكلة جديدة.

TypeError: كائن 'AutoTrackable' غير قابل للاستدعاء

# BAD: Raises error
embed = hub.load('https://tfhub.dev/google/nnlm-en-dim128/1')
embed(['my text', 'batch'])

ينشأ هذا الخطأ بشكل متكرر عند تحميل النماذج بتنسيق TF1 Hub باستخدام hub.load() API في TF2. يجب أن تؤدي إضافة التوقيع الصحيح إلى حل هذه المشكلة. راجع دليل ترحيل TF-Hub لـ TF2 للحصول على مزيد من التفاصيل حول الانتقال إلى TF2 واستخدام النماذج بتنسيق TF1 Hub في TF2.


embed = hub.load('https://tfhub.dev/google/nnlm-en-dim128/1')
embed.signatures['default'](['my text', 'batch'])

لا يمكن تنزيل الوحدة النمطية

في عملية استخدام وحدة نمطية من عنوان URL، هناك العديد من الأخطاء التي يمكن أن تظهر بسبب مكدس الشبكة. غالبًا ما تكون هذه مشكلة خاصة بالجهاز الذي يقوم بتشغيل التعليمات البرمجية وليست مشكلة بالمكتبة. فيما يلي قائمة بالأشياء الشائعة:

  • "حدث EOF في انتهاك للبروتوكول" - من المحتمل أن تنشأ هذه المشكلة إذا كان إصدار python المثبت لا يدعم متطلبات TLS للخادم الذي يستضيف الوحدة. والجدير بالذكر أن إصدار python 2.7.5 معروف بفشله في حل الوحدات النمطية من مجال tfhub.dev. إصلاح : الرجاء التحديث إلى إصدار أحدث من بيثون.

  • "لا يمكن التحقق من شهادة tfhub.dev" - من المحتمل أن تنشأ هذه المشكلة إذا كان هناك شيء ما على الشبكة يحاول العمل كـ dev gTLD. قبل استخدام .dev كنطاق gTLD، كان المطورون وأطر العمل يستخدمون أحيانًا أسماء .dev للمساعدة في اختبار التعليمات البرمجية. تصحيح: تحديد وإعادة تكوين البرنامج الذي يعترض تحليل الاسم في المجال ".dev".

  • فشل الكتابة إلى دليل ذاكرة التخزين المؤقت /tmp/tfhub_modules (أو ما شابه): راجع التخزين المؤقت للتعرف على ماهيته وكيفية تغيير موقعه.

إذا لم تنجح الأخطاء والإصلاحات المذكورة أعلاه، فيمكن محاولة تنزيل وحدة يدويًا عن طريق محاكاة بروتوكول إرفاق ?tf-hub-format=compressed بعنوان URL لتنزيل ملف مضغوط tar يجب فك ضغطه يدويًا إلى ملف محلي. ملف. ويمكن بعد ذلك استخدام المسار إلى الملف المحلي بدلاً من عنوان URL. هنا هو مثال سريع:

# Create a folder for the TF hub module.
$ mkdir /tmp/moduleA
# Download the module, and uncompress it to the destination folder. You might want to do this manually.
$ curl -L "https://tfhub.dev/google/universal-sentence-encoder/2?tf-hub-format=compressed" | tar -zxvC /tmp/moduleA
# Test to make sure it works.
$ python
> import tensorflow_hub as hub
> hub.Module("/tmp/moduleA")

تشغيل الاستدلال على وحدة نمطية تمت تهيئتها مسبقًا

إذا كنت تكتب برنامج Python الذي يطبق وحدة نمطية عدة مرات على بيانات الإدخال، فيمكنك تطبيق الوصفات التالية. (ملاحظة: بالنسبة لطلبات الخدمة في خدمات الإنتاج، فكر في خدمة TensorFlow أو غيرها من الحلول القابلة للتطوير والخالية من لغة Python.)

بافتراض أن نموذج حالة الاستخدام الخاص بك هو التهيئة والطلبات اللاحقة (على سبيل المثال، Django، وFlask، وخادم HTTP المخصص، وما إلى ذلك)، يمكنك إعداد العرض على النحو التالي:

النماذج المحفوظة TF2

  • في جزء التهيئة:
    • قم بتحميل طراز TF2.0.
import tensorflow_hub as hub

embedding_fn = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
  • في جزء الطلب:
    • استخدم وظيفة التضمين لتشغيل الاستدلال.
embedding_fn(["Hello world"])

تم تحسين استدعاء tf.function للأداء، راجع دليل tf.function .

وحدات محور TF1

  • في جزء التهيئة:
    • أنشئ الرسم البياني باستخدام عنصر نائب - نقطة الدخول إلى الرسم البياني.
    • تهيئة الجلسة.
import tensorflow as tf
import tensorflow_hub as hub

# Create graph and finalize (finalizing optional but recommended).
g = tf.Graph()
with g.as_default():
  # We will be feeding 1D tensors of text into the graph.
  text_input = tf.placeholder(dtype=tf.string, shape=[None])
  embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")
  embedded_text = embed(text_input)
  init_op = tf.group([tf.global_variables_initializer(), tf.tables_initializer()])
g.finalize()

# Create session and initialize.
session = tf.Session(graph=g)
session.run(init_op)
  • في جزء الطلب:
    • استخدم الجلسة لإدخال البيانات في الرسم البياني من خلال العنصر النائب.
result = session.run(embedded_text, feed_dict={text_input: ["Hello world"]})

لا يمكن تغيير نوع dtype للنموذج (على سبيل المثال، float32 إلى bfloat16)

تحتوي النماذج المحفوظة الخاصة بـ TensorFlow (المشتركة على TF Hub أو غير ذلك) على عمليات تعمل على أنواع البيانات الثابتة (غالبًا، float32 للأوزان والتنشيط الوسيط للشبكات العصبية). لا يمكن تغييرها بعد تحميل SavedModel (ولكن يمكن لناشري النماذج اختيار نشر نماذج مختلفة بأنواع بيانات مختلفة).

تحديث نسخة نموذجية

يمكن تحديث بيانات التعريف التوثيقية لإصدارات النموذج. ومع ذلك، فإن أصول الإصدار (ملفات النموذج) غير قابلة للتغيير. إذا كنت تريد تغيير أصول النموذج، فيمكنك نشر إصدار أحدث من النموذج. من الممارسات الجيدة توسيع الوثائق بسجل التغيير الذي يصف ما تم تغييره بين الإصدارات.