این صفحه نحوه ادامه استفاده از TensorFlow Hub را در حین انتقال کد TensorFlow از TensorFlow 1 به TensorFlow 2 توضیح می دهد. این راهنمای انتقال کلی TensorFlow را تکمیل می کند.
برای TF2، TF Hub از API قدیمی hub.Module
برای ساخت یک 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
برای TensorFlow 1.15 (در حالت اشتیاق و نمودار) و در TensorFlow 2 کار می کند. این API جدید می تواند دارایی های جدید TF2 SavedModel را بارگیری کند، و با محدودیت های ارائه شده در مدل راهنمای سازگاری ، مدلهای قدیمی در قالب TF1 Hub.
به طور کلی، توصیه می شود تا حد امکان از API جدید استفاده کنید.
خلاصه ای از API جدید
hub.load()
تابع سطح پایین جدیدی برای بارگیری SavedModel از TensorFlow Hub (یا سرویس های سازگار) است. tf.saved_model.load()
TF2 را می پیچد. راهنمای SavedModel TensorFlow توضیح میدهد که با نتیجه چه کاری میتوانید انجام دهید.
m = hub.load(handle)
outputs = m(inputs)
کلاس hub.KerasLayer
hub.load()
را فراخوانی می کند و نتیجه را برای استفاده در Keras در کنار سایر لایه های Keras تطبیق می دهد. (حتی ممکن است برای SavedModel های بارگذاری شده که به روش های دیگر استفاده می شوند، یک پوشش مناسب باشد.)
model = tf.keras.Sequential([
hub.KerasLayer(handle),
...])
بسیاری از آموزش ها این API ها را در عمل نشان می دهند. در اینجا چند نمونه آورده شده است:
استفاده از API جدید در آموزش Estimator
اگر از TF2 SavedModel در برآوردگر برای آموزش با سرورهای پارامتر استفاده می کنید (یا در غیر این صورت در جلسه TF1 با متغیرهایی که در دستگاه های راه دور قرار داده شده اند)، باید experimental.share_cluster_devices_in_session
را در ConfigProto tf.Session تنظیم کنید، در غیر این صورت با خطا مواجه خواهید شد. مانند "دستگاه اختصاص داده شده "/job:ps/replica:0/task:0/device: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 بارگیری کنید. با شروع نسخه 0.7 tensorflow_hub
، میتوانید از مدل قدیمی در قالب 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 های سطح پایین تر
مدلهای قالب 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
دستوری از توابع بتنی TensorFlow است که با نامهای امضا کلید میخورد. فراخوانی چنین تابعی تمام خروجی های آن را حتی اگر استفاده نشده باشد محاسبه می کند. (این با ارزیابی تنبل حالت نمودار TF1 متفاوت است.)