Bu sayfa, TensorFlow kodunuzu TensorFlow 1'den TensorFlow 2'ye geçirirken TensorFlow Hub'ı nasıl kullanmaya devam edeceğinizi açıklar. Bu sayfa, TensorFlow'un genel geçiş kılavuzunu tamamlar.
TF2 için, TF Hub, tf.compat.v1.Graph
gibi bir tf.contrib.v1.layers
oluşturmak için eski hub.Module
API'sinden uzaklaştı. Bunun yerine, artık bir hub.KerasLayer
(tipik olarak tf.keras.Model
yeni istekli yürütme ortamında ) oluşturmak için diğer Keras katmanlarıyla birlikte kullanım için bir hub.KerasLayer ve düşük seviyeli TensorFlow kodu için onun temel alınan hub.load()
yöntemi vardır.
hub.Module
API, TF1'de ve TF2'nin TF1 uyumluluk modunda kullanım için tensorflow_hub
kitaplığında kullanılabilir durumda kalır. Yalnızca TF1 Hub formatındaki modelleri yükleyebilir.
hub.load()
ve hub.KerasLayer
yeni API'si, TensorFlow 1.15 (istekli ve grafik modunda) ve TensorFlow 2 için çalışır. Bu yeni API, yeni TF2 SavedModel varlıklarını ve modelde belirtilen kısıtlamalarla yükleyebilir. uyumluluk kılavuzu , TF1 Hub formatındaki eski modeller.
Genel olarak, mümkün olan her yerde yeni API kullanılması önerilir.
Yeni API'nin özeti
hub.load()
, TensorFlow Hub'dan (veya uyumlu hizmetlerden) bir SavedModel yüklemek için yeni alt düzey işlevdir. tf.saved_model.load()
sarar; TensorFlow'un SavedModel Kılavuzu , sonuçla neler yapabileceğinizi açıklar.
m = hub.load(handle)
outputs = m(inputs)
hub.KerasLayer
sınıfı hub.load()
çağırır ve sonucu diğer Keras katmanlarının yanı sıra Keras'ta kullanım için uyarlar. (Başka şekillerde kullanılan yüklü SavedModel'ler için uygun bir sarmalayıcı bile olabilir.)
model = tf.keras.Sequential([
hub.KerasLayer(handle),
...])
Birçok öğretici, bu API'leri çalışırken gösterir. özellikle bakınız
Tahminci eğitiminde yeni API'yi kullanma
Parametre sunucularıyla eğitim için (veya uzak cihazlara değişkenler yerleştirilmiş bir TF1 Oturumunda) bir Tahmin Aracında bir TF2 SavedModel kullanırsanız, tf.Session'ın ConfigProto'sunda experimental.share_cluster_devices_in_session
ayarlamanız gerekir, aksi takdirde bir hata alırsınız "Atanan cihaz '/job:ps/replica:0/task:0/device:CPU:0' herhangi bir cihazla eşleşmiyor."
Gerekli seçenek gibi ayarlanabilir
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 ile başlayarak, bu seçenek artık deneysel değildir ve .experimental
parçası bırakılabilir.
Eski modelleri TF1 Hub formatında yükleme
Kullanım durumunuz için henüz yeni bir TF2 SavedModel mevcut olmayabilir ve eski bir modeli TF1 Hub formatında yüklemeniz gerekebilir. tensorflow_hub
0.7 sürümünden başlayarak, eski modeli hub.KerasLayer
ile birlikte TF1 Hub formatında aşağıda gösterildiği gibi kullanabilirsiniz:
m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
Ek KerasLayer
, TF1 Hub formatında ve eski SavedModel'lerde eski modellerin daha özel kullanımları için tags
, signature
, output_key
ve signature_outputs_as_dict
belirtme yeteneğini ortaya çıkarır.
TF1 Hub format uyumluluğu hakkında daha fazla bilgi için model uyumluluk kılavuzuna bakın.
Daha düşük seviyeli API'leri kullanma
Eski TF1 Hub formatındaki modeller tf.saved_model.load
aracılığıyla yüklenebilir. Onun yerine
# DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)
kullanılması tavsiye edilir:
# TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)
Bu örneklerde m.signatures
, imza adlarıyla anahtarlanan TensorFlow somut işlevlerinin bir ifadesidir. Böyle bir işlevi çağırmak, kullanılmamış olsa bile tüm çıktılarını hesaplar. (Bu, TF1'in grafik modunun tembel değerlendirmesinden farklıdır.)