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

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