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

با TensorFlow Hub از TF1 به TF2 مهاجرت می کنید

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

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

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

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

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

خلاصه API جدید

hub.load() عملکرد جدید سطح پایین برای بارگذاری یک SavedModel از TensorFlow Hub (یا خدمات سازگار) است. این tf.saved_model.load() TF2 را tf.saved_model.load() ؛ راهنمای SavedModel TensorFlow کارهایی را که می توانید با نتیجه انجام دهید توصیف می کند.

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

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

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

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

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

اگر برای آموزش با سرورهای پارامتر از TF2 SavedModel در Estimator استفاده می کنید (یا در غیر این صورت در یک جلسه TF1 با متغیرهای قرار داده شده بر روی دستگاههای از راه دور) ، باید experimental.share_cluster_devices_in_session .share_cluster_devices_in_session را در tf.Session's ConfigProto تنظیم کنید ، یا در غیر این صورت خطایی دریافت خواهید کرد. مانند "دستگاه اختصاص یافته" / کار: 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

ممکن است اتفاق بیفتد که TD2 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 و 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 متفاوت است.)