TensorFlow Hub ile TF1'den TF2'ye geçiş

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.)