Bu sayfada TensorFlow kodunuzu TensorFlow 1'den TensorFlow 2'ye taşırken TensorFlow Hub'ı nasıl kullanmaya devam edebileceğiniz açıklanmaktadır. TensorFlow'un genel geçiş kılavuzunu tamamlar.
TF2 için TF Hub, tf.contrib.v1.layers
yaptığı gibi bir tf.compat.v1.Graph
oluşturmak için eski hub.Module
API'sinden uzaklaştı. Bunun yerine, artık bir tf.keras.Model
(tipik olarak TF2'nin yeni istekli yürütme ortamında ) oluşturmak için diğer Keras katmanlarıyla birlikte kullanılacak bir hub.KerasLayer
ve düşük seviyeli TensorFlow kodu için bunun altında yatan hub.load()
yöntemi var.
hub.Module
API'si, TF1'de ve TF2'nin TF1 uyumluluk modunda kullanılmak üzere tensorflow_hub
kitaplığında mevcuttur. Yalnızca TF1 Hub formatındaki modelleri yükleyebilir.
hub.load()
ve hub.KerasLayer
yeni API'si, TensorFlow 1.15 (istemli ve grafik modunda) ve TensorFlow 2'de ç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ı tavsiye edilir.
Yeni API'nin özeti
hub.load()
TensorFlow Hub'dan (veya uyumlu hizmetlerden) SavedModel yüklemek için kullanılan yeni düşük düzeyli işlevdir. TF2'nin tf.saved_model.load()
işlevini 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ıyla birlikte Keras'ta kullanılmak üzere 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 eğitimde bu API'ler çalışırken gösterilmektedir. İşte bazı örnekler:
Tahminci eğitiminde yeni API'yi kullanma
Parametre sunucularıyla (veya uzak cihazlara yerleştirilen değişkenlerle birlikte bir TF1 Oturumunda) eğitim için bir Tahmincide TF2 SavedModel kullanıyorsanız, tf.Session'ın ConfigProto'sunda experimental.share_cluster_devices_in_session
ayarlamanız gerekir, aksi takdirde bir hata alırsınız "Atanan aygıt '/job:ps/replica:0/task:0/device:CPU:0' hiçbir aygıtla eşleşmiyor." gibi.
Gerekli seçenek şu şekilde 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'den itibaren bu seçenek artık deneysel değildir ve .experimental
parça 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 TF1 Hub formatında eski bir model yüklemeniz gerekebilir. tensorflow_hub
sürüm 0.7'den başlayarak, TF1 Hub formatındaki eski modeli hub.KerasLayer
ile birlikte aşağıda gösterildiği gibi kullanabilirsiniz:
m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
Ek olarak KerasLayer
TF1 Hub formatındaki eski modellerin ve eski SavedModels'in daha spesifik 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 formatlı modeller tf.saved_model.load
aracılığıyla yüklenebilir. 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 fonksiyonlarının bir diktesidir. 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.)