مسائل رایج

اگر مشکل شما در اینجا فهرست نشده است، لطفاً قبل از پر کردن مشکل جدید، مشکلات github را جستجو کنید.

TypeError: شیء «AutoTrackable» قابل فراخوانی نیست

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

این خطا اغلب هنگام بارگیری مدل ها در قالب TF1 Hub با API hub.load() در TF2 رخ می دهد. اضافه کردن امضای صحیح باید این مشکل را برطرف کند. برای جزئیات بیشتر در مورد انتقال به TF2 و استفاده از مدل‌ها در قالب TF1 Hub در TF2 ، راهنمای انتقال TF-Hub برای TF2 را ببینید.


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

نمی توان یک ماژول را دانلود کرد

در فرآیند استفاده از یک ماژول از یک URL، خطاهای زیادی وجود دارد که می تواند به دلیل پشته شبکه ظاهر شود. اغلب این مشکل مخصوص دستگاهی است که کد را اجرا می کند و مشکلی با کتابخانه نیست. در اینجا لیستی از موارد رایج آورده شده است:

  • "EOF در نقض پروتکل رخ داده است" - اگر نسخه پایتون نصب شده الزامات TLS سرور میزبان ماژول را پشتیبانی نکند، احتمالاً این مشکل ایجاد می شود. قابل ذکر است، python 2.7.5 شناخته شده است که در حل ماژول ها از دامنه tfhub.dev ناموفق است. رفع : لطفاً به نسخه جدیدتر پایتون به روز رسانی کنید.

  • "نمی توان گواهی tfhub.dev را تایید کرد" - اگر چیزی در شبکه بخواهد به عنوان توسعه دهنده gTLD عمل کند، این مشکل به احتمال زیاد ایجاد می شود. قبل از اینکه .dev به عنوان gTLD استفاده شود، توسعه دهندگان و فریم ورک ها گاهی اوقات از نام های .dev برای کمک به تست کد استفاده می کردند. رفع: نرم افزاری را که وضوح نام را در دامنه ".dev" قطع می کند، شناسایی و پیکربندی مجدد کنید.

  • عدم نوشتن در دایرکتوری کش /tmp/tfhub_modules (یا موارد مشابه): برای اینکه چه چیزی است و چگونه مکان آن را تغییر دهید به Caching مراجعه کنید.

اگر خطاها و رفع‌های فوق کار نکرد، می‌توانید با شبیه‌سازی پروتکل پیوست کردن ?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")

اجرای استنتاج بر روی یک ماژول از قبل راه اندازی شده

اگر در حال نوشتن یک برنامه پایتون هستید که یک ماژول را بارها روی داده های ورودی اعمال می کند، می توانید دستور العمل های زیر را اعمال کنید. (توجه: برای ارائه درخواست ها در خدمات تولید، سرویس TensorFlow یا سایر راه حل های مقیاس پذیر و بدون پایتون را در نظر بگیرید.)

با فرض اینکه مدل مورد استفاده شما مقدار دهی اولیه و درخواست های بعدی است (به عنوان مثال جنگو، فلاسک، سرور HTTP سفارشی و غیره)، می توانید سرویس را به صورت زیر تنظیم کنید:

TF2 SavedModels

  • در قسمت اولیه سازی:
    • مدل TF2.0 را بارگیری کنید.
import tensorflow_hub as hub

embedding_fn = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
  • در قسمت درخواست:
    • از تابع embedding برای اجرای استنتاج استفاده کنید.
embedding_fn(["Hello world"])

این فراخوانی یک tf.function برای عملکرد بهینه شده است، به راهنمای tf.function مراجعه کنید.

ماژول های TF1 Hub

  • در قسمت اولیه سازی:
    • نمودار را با نگهدارنده مکان - نقطه ورود به نمودار بسازید.
    • جلسه را راه اندازی کنید.
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"]})

نمی توان نوع d مدل را تغییر داد (مثلاً float32 به bfloat16)

SavedModels TensorFlow (به اشتراک گذاشته شده در TF Hub یا غیره) شامل عملیاتی است که بر روی انواع داده های ثابت کار می کند (اغلب، float32 برای وزن ها و فعال سازی های میانی شبکه های عصبی). پس از بارگذاری SavedModel نمی‌توان این موارد را تغییر داد (اما ناشران مدل می‌توانند مدل‌های مختلف را با انواع داده‌های مختلف منتشر کنند).

یک نسخه مدل را به روز کنید

فراداده اسناد نسخه های مدل را می توان به روز کرد. با این حال، دارایی های نسخه (فایل های مدل) تغییر ناپذیر هستند. اگر می‌خواهید دارایی‌های مدل را تغییر دهید، می‌توانید نسخه جدیدتری از مدل را منتشر کنید. این یک تمرین خوب است که اسناد را با یک گزارش تغییر گسترش دهید که تغییرات بین نسخه ها را توضیح دهد.