Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

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

Bu sayfa, TensorFlow kodunuzu TensorFlow 1'den TensorFlow 2'ye geçirirken TensorFlow Hub'ı kullanmaya nasıl devam edeceğinizi açıklar. TensorFlow'un genel geçiş kılavuzunu tamamlar.

TF2 için, TF Hub eski hub.Module tf.contrib.v1.layers . tf.compat.v1.Graph gibi tf.contrib.v1.layers gibi bir tf.compat.v1.Graph oluşturmak için API API. Bunun yerine, artık bir hub.KerasLayer (genellikle tf.keras.Model yeni istekli yürütme ortamında ) oluşturmak için diğer hub.KerasLayer katmanlarıyla birlikte kullanım için bir tf.keras.Model ve düşük seviyeli TensorFlow kodu için altta yatan hub.load() yöntemi var.

hub.Module API, TF1 ve tensorflow_hub TF1 uyumluluk modunda kullanılmak üzere tensorflow_hub kütüphanesinde kullanılabilir. Yalnızca TF1 Hub biçimindeki modelleri yükleyebilir.

hub.load() ve hub.KerasLayer yeni API'sı TensorFlow 1.15 (istekli ve grafik modunda) ve TensorFlow 2'de çalışır. Bu yeni API, yeni TF2 SavedModel varlıklarını yükleyebilir ve kısıtlamalar modelde belirtilen uyumluluk kılavuzu , TF1 Hub formatında eski modeller.

Genel olarak, mümkün olan her yerde yeni API kullanılması önerilir.

Yeni API'nın ö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() ; TensorFlow'un KaydedildiModel 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 hub.load() kullanım için uyarlar. (Başka şekillerde kullanılan kayıtlı SaveModels için bile uygun bir ambalaj olabilir.)

 model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])
 

Birçok öğretici bu API'ları çalışırken gösterir. Özellikle bakınız

Tahmin Edici eğitiminde yeni API'yi kullanma

Parametre sunucuları ile eğitim için bir Tahmincisi'nde (veya uzak cihazlara yerleştirilmiş değişkenleri olan bir TF1 Oturumunda) bir 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 "Atanmış cihaz '/ job: ps / replica: 0 / task: 0 / device: CPU: 0' hiçbir cihazla eşleşmiyor."

Gerekli seçenek aşağıdaki 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 atılabilir.

Eski modelleri TF1 Hub formatında yükleme

Kullanım durumunuz için henüz yeni bir TF2 SavedModel bulunmuyor olabilir ve TF1 Hub formatında eski bir model yüklemeniz gerekebilir. tensorflow_hub 0.7 sürümünden başlayarak, tensorflow_hub ile birlikte TF1 Hub biçiminde eski modeli kullanabilirsiniz: hub.KerasLayer aşağıda gösterildiği gibi:

 m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
 

Ayrıca KerasLayer , eski modellerin TF1 Hub biçiminde ve eski Kaydedildi Modellerinde daha spesifik kullanımları için tags , signature , output_key ve signature_outputs_as_dict belirtme yeteneğini ortaya koyar.

TF1 Hub formatı uyumluluğu hakkında daha fazla bilgi için model uyumluluk kılavuzuna bakın .

Daha düşük seviye API'leri kullanma

Eski TF1 Hub formatındaki modeller tf.saved_model.load ile tf.saved_model.load . 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ı ile anahtarlanan TensorFlow somut işlevlerinin bir göstergesidir . Böyle bir işlevi çağırmak, kullanılmasa bile tüm çıkışlarını hesaplar. (Bu, TF1'in grafik modunun tembel değerlendirmesinden farklıdır.)