Bu sayfa, TensorFlow kodunuzu TensorFlow 1'den TensorFlow 2'ye taşırken TensorFlow Hub'ı nasıl kullanmaya devam edeceğinizi açıklar. TensorFlow'un genel geçiş kılavuzunu tamamlar.
TF Hub, TF2 için, 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 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 bunun düşük seviyeli TensorFlow kodu için altta yatan hub.load()
yöntemi var.
hub.Module
API, TF1'de ve TF2'nin TF1 uyumluluk modunda kullanım için tensorflow_hub
kitaplığında mevcut olmaya devam eder. Yalnızca TF1 Hub biçimindeki modelleri yükleyebilir.
Yeni hub.load()
ve hub.KerasLayer
API'si, TensorFlow 1.15 (istek 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 biçimindeki 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 düşük seviyeli 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ıyla birlikte Keras'ta kullanılmak üzere uyarlar. (Başka şekillerde kullanılan, yüklenmiş SavedModels için uygun bir sarmalayıcı bile olabilir.)
model = tf.keras.Sequential([
hub.KerasLayer(handle),
...])
Pek çok öğretici, bu API'leri çalışırken gösterir. özellikle bakın
Estimator eğitiminde yeni API'yi kullanma
Parametre sunucularıyla eğitim için bir Estimator'da bir TF2 SavedModel kullanıyorsanız (veya uzak cihazlara değişkenler yerleştirilmiş bir TF1 Oturumunda), 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 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'den başlayarak, bu seçenek artık deneysel değildir ve .experimental
parça bırakılabilir.
Eski modelleri TF1 Hub biçiminde yükleme
Kullanım durumunuz için yeni bir TF2 SavedModel henüz mevcut olmayabilir ve eski bir modeli TF1 Hub formatında yüklemeniz gerekebilir. tensorflow_hub
sürüm 0.7'den başlayarak, hub.KerasLayer
ile birlikte TF1 Hub biçimindeki eski modeli aşağıda gösterildiği gibi kullanabilirsiniz:
m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
Ek KerasLayer
, TF1 Hub biçimindeki ve eski SavedModels'teki eski modellerin daha spesifik kullanımları için tags
, signature
, output_key
ve signature_outputs_as_dict
belirleme becerisini ortaya çıkarır.
TF1 Hub biçim 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 biçimli 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 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.)