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

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