این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

مهاجرت از TF1 به TF2 با TensorFlow Hub

در این صفحه نحوه استفاده از TensorFlow Hub هنگام انتقال کد TensorFlow از TensorFlow 1 به TensorFlow 2 توضیح داده شده است. این مکمل راهنمای عمومی مهاجرت TensorFlow است.

برای TF2 ، TF Hub از مرکز قدیمی hub.Module API برای ساخت tf.compat.v1.Graph مانند tf.contrib.v1.layers انجام می دهد. در عوض ، اکنون یک hub.KerasLayer برای استفاده در کنار سایر لایه های Keras برای ساخت مدل tf.keras.Model (معمولاً در محیط اجرای مشتاقانه جدید TF2) و روش hub.load() اساسی آن برای کد سطح پایین TensorFlow وجود دارد.

hub.Module API در کتابخانه tensorflow_hub برای استفاده در TF1 و حالت سازگاری TF1 TF2 در دسترس باقی مانده است. این فقط می تواند مدل ها را در قالب TF1 Hub بارگیری کند .

API جدید hub.load() و hub.KerasLayer برای hub.KerasLayer 1.15 (در حالت اشتیاق و نمودار) و در TensorFlow 2 کار می کند. این API جدید می تواند دارایی های TF2 SavedModel جدید را بارگیری کند و با محدودیت های تعیین شده در مدل راهنمای سازگاری ، مدلهای قدیمی در قالب TF1 Hub.

به طور کلی ، توصیه می شود تا جای ممکن از API جدید استفاده کنید.

خلاصه API جدید

hub.load() عملکرد جدید سطح پایین برای بارگیری یک مدل SavedMel از TensorFlow Hub (یا سرویس های سازگار) است. این tf.saved_model.load() TF2 را می tf.saved_model.load() . راهنمای SavedModel TensorFlow توضیح می دهد که چه کاری می توانید با نتیجه انجام دهید.

m = hub.load(handle)
outputs = m(inputs)

کلاس hub.KerasLayer فراخوانی hub.load() و نتیجه را برای استفاده در Keras در کنار سایر لایه های Keras تطبیق می دهد. (حتی ممکن است یک لفافه مناسب برای مدلهای ذخیره شده SavedM باشد که به روشهای دیگر استفاده می شود.)

model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])

بسیاری از آموزش ها این API ها را به صورت عملی نشان می دهند. به طور خاص مشاهده کنید

استفاده از API جدید در آموزش Estimator

در صورت استفاده از TF2 SavedModel در برآورد برای آموزش با سرورهای پارامتر (یا در غیر این صورت در یک جلسه TF1 با متغیرهای قرار داده شده بر روی دستگاه های از راه دور)، شما را به مجموعه نیاز experimental.share_cluster_devices_in_session در ConfigProto tf.Session، و یا دیگری به شما یک خطا دریافت مانند "دستگاه اختصاص داده شده" / کار: ps / ماکت: 0 / کار: 0 / دستگاه: CPU: 0 "با هیچ دستگاهی مطابقت ندارد."

گزینه لازم را می توان مانند تنظیم کرد

session_config = tf.compat.v1.ConfigProto()
session_config.experimental.share_cluster_devices_in_session = True
run_config = tf.estimator.RunConfig(..., session_config=session_config)
estimator = tf.estimator.Estimator(..., config=run_config)

با شروع TF2.2 ، این گزینه دیگر آزمایشی نیست و می توان قطعه .experimental را رها کرد.

بارگیری مدلهای قدیمی در قالب TF1 Hub

ممکن است یک مدل TF2 SavedModel جدید هنوز در دسترس نباشد و شما باید یک مدل قدیمی را در قالب TF1 Hub بارگیری کنید. با شروع انتشار tensorflow_hub 0.7 ، می توانید از مدل قدیمی در قالب TF1 Hub همراه با hub.KerasLayer همانطور که در زیر نشان داده شده است:

m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)

علاوه بر این KerasLayer توانایی تعیین tags ، signature ، output_key و signature_outputs_as_dict برای کاربردهای خاص تر مدلهای قدیمی در قالب TF1 Hub و میراث SavedModels نشان می دهد.

برای اطلاعات بیشتر در مورد سازگاری قالب TF1 Hub به راهنمای سازگاری مدل مراجعه کنید.

استفاده از API های سطح پایین

مدلهای Legacy TF1 Hub را می توانید از طریق tf.saved_model.load . بجای

# DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)

توصیه می شود از موارد زیر استفاده کنید:

# TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)

در این نمونه ها m.signatures عملکردهای بتن m.signatures است که با نام امضا کلید m.signatures است. فراخوانی چنین عملکردی تمام خروجی های آن را محاسبه می کند ، حتی اگر استفاده نشده باشد. (این با ارزیابی تنبل حالت نمودار TF1 متفاوت است.)