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

TF1 Hub biçimi

TensorFlow Hub, 2018'deki lansmanında tek bir varlık türü sundu: TensorFlow 1 programlarına içe aktarmak için TF1 Hub biçimi.

Bu sayfa, hub.Module TF1 Hub biçiminin (veya hub.Module TF1 uyumluluk modunun) hub.Module sınıfıyla ve ilişkili API'lerle nasıl kullanılacağını açıklar. (Tipik örneği inşa etmek tf.Graph muhtemelen bir TF1 içinde Estimator ile TF1 Hub biçiminde bir veya daha fazla modelin birleştirilmesiyle, tf.compat.layers veya tf.layers ).

TensorFlow 2 (TF1 uyumluluk modu dışında) kullanıcıları hub.load() veya hub.KerasLayer ile yeni API'yı kullanmalıdır. Yeni API, yeni TF2 SavedModel varlık türünü yükler, ancak TF1 Hub biçimini TF2'ye yüklemek için sınırlı desteğe sahiptir.

TF1 Hub biçiminde bir model kullanma

Bir modeli TF1 Hub biçiminde örnekleme

TF1 Hub biçimindeki bir model, URL veya dosya sistemi yolu ile bir dizeden bir hub.Module nesnesi oluşturularak TensorFlow programına içe aktarılır:

 m = hub.Module("path/to/a/module_dir")
 

Bu, modülün değişkenlerini geçerli TensorFlow grafiğine ekler. Başlatıcılarını çalıştırmak, önceden eğitilmiş değerlerini diskten okuyacaktır. Aynı şekilde, tabloya ve diğer durum grafiğe eklenir.

Önbellek Modülleri

Bir URL'den modül oluştururken, modül içeriği indirilir ve yerel sistem geçici dizininde önbelleğe alınır. Modüllerin önbelleğe alındığı konum, TFHUB_CACHE_DIR ortam değişkeni kullanılarak geçersiz kılınabilir. Ayrıntılar için bkz. Önbellekleme .

Modül Uygulama

Bir kez başlatıldığında, m modülü, tensör girişlerinden tensör çıkışlarına kadar bir Python işlevi gibi sıfır veya daha fazla kez çağrılabilir:

 y = m(x)
 

Bu tür her bir arama işlem mevcut TensorFlow grafik işlemleri ekler y den x . Bu, eğitimli ağırlıkları olan değişkenleri içeriyorsa, bunlar tüm uygulamalar arasında paylaşılır.

Modüller, birden fazla şekilde uygulanmasına izin vermek için adlandırılmış birden çok imza tanımlayabilir (Python nesnelerinin yöntemlerine benzer). Bir modülün belgeleri mevcut imzaları tanımlamalıdır. Yukarıdaki çağrı "default" adlı imzayı uygular. Herhangi bir imza, adı isteğe bağlı signature= bağımsız değişkenine geçirilerek seçilebilir.

Bir imzanın birden fazla girişi varsa, bunların imza tarafından tanımlanan anahtarlar ile bir dikte olarak geçirilmesi gerekir. Benzer şekilde, bir imzanın birden çok çıktısı varsa, bunlar imza tarafından tanımlanan tuşların altında as_dict=True bir dict olarak alınabilir ( as_dict=False ise döndürülen tek çıktı için "default" anahtarıdır). Bu yüzden bir Modül uygulamanın en genel şekli şöyledir:

 outputs = m(dict(apples=x1, oranges=x2), signature="fruit_to_pet", as_dict=True)
y1 = outputs["cats"]
y2 = outputs["dogs"]
 

Arayan, imza ile tanımlanan tüm girişleri sağlamalıdır, ancak bir modülün tüm çıkışlarını kullanma zorunluluğu yoktur. TensorFlow, modülün yalnızca tf.Session.run() içinde bir hedefin bağımlılıkları olarak sonuçlanan kısımlarını çalıştırır. Aslında, modül yayıncıları, ana çıktılarla birlikte gelişmiş kullanımlar için (ara katmanların etkinleştirilmesi gibi) çeşitli çıktılar sağlamayı seçebilirler. Modül tüketicileri ek çıktıları nazikçe ele almalıdır.

Alternatif modülleri denemek

Aynı görev için birden fazla modül olduğunda, TensorFlow Hub, bunları uyumlu imzalarla (arayüzler) donatmaya teşvik eder, böylece farklı olanları denemek, modül tanıtıcısını dize değerli bir hiperparametre gibi değiştirmek kadar kolaydır.

Bu amaçla, popüler görevler için önerilen Ortak İmzalar koleksiyonunu tutuyoruz.

Yeni Bir Modül Oluşturma

Uyumluluk notu

TF1 Hub biçimi TensorFlow 1'e yöneliktir. TensorFlow 2'deki TF Hub tarafından yalnızca kısmen desteklenir. Lütfen bunun yerine yeni TF2 SavedModel formatında yayınlamayı düşünün.

TF1 Hub formatı, sözdizimsel düzeyde (aynı dosya adları ve protokol mesajları) TensorFlow 1'in SavedModel formatına benzer, ancak modülün yeniden kullanılmasına, kompozisyona ve yeniden eğitime izin vermek için semantik olarak farklıdır (örneğin, kaynak başlatıcıların farklı depolanması, farklı etiketleme) metagraf kuralları). Onları diskte ayırmanın en kolay yolu tfhub_module.pb dosyasının varlığı veya yokluğudur.

Genel yaklaşım

Yeni bir modül tanımlamak için, bir yayıncı çağırır hub.create_module_spec() bir fonksiyonu module_fn . Bu işlev, arayan tarafından sağlanacak girişler için tf.placeholder() yöntemini kullanarak modülün dahili yapısını temsil eden bir grafik oluşturur. Ardından hub.add_signature(name, inputs, outputs) bir veya daha çok kez çağırarak imzaları tanımlar.

Örneğin:

 def module_fn():
  inputs = tf.placeholder(dtype=tf.float32, shape=[None, 50])
  layer1 = tf.layers.dense(inputs, 200)
  layer2 = tf.layers.dense(layer1, 100)
  outputs = dict(default=layer2, hidden_activations=layer1)
  # Add default signature.
  hub.add_signature(inputs=inputs, outputs=outputs)

...
spec = hub.create_module_spec(module_fn)
 

hub.create_module_spec() , bir modül yerine belirli bir TensorFlow grafiği içinde örnek oluşturmak için kullanılabilir. Böyle bir durumda kontrol noktası yoktur ve modül örneği bunun yerine değişken başlatıcıları kullanır.

Herhangi bir modül örneği, export(path, session) yöntemiyle diske serileştirilebilir. Bir modülü dışa aktarmak, tanımını session değişkenlerinin geçerli durumu ile birlikte geçirilen yola serileştirir. Bu, bir modülü ilk kez dışa aktarırken ve ince ayarlı bir modülü dışa aktarırken kullanılabilir.

TensorFlow Tahminleyicileri ile uyumluluk için hub.LatestModuleExporter son kontrol noktasından, tıpkı ihracat modülleri tf.estimator.LatestExporter son kontrol noktasından bütün modelin ihraç ediyor.

Modül yayıncıları, mümkün olduğunda ortak bir imza uygulamalıdır, böylece tüketiciler kolayca modül alışverişi yapabilir ve sorunları için en iyisini bulabilirler.

Gerçek örnek

Ortak bir metin yerleştirme biçiminden nasıl modül oluşturulacağına dair gerçek dünya örneği için metin yerleştirme modülü ihracatçımıza bir göz atın.

İnce ayar

İçe aktarılan bir modülün değişkenlerini, etrafındaki modelinkilerle birlikte eğitmeye ince ayar denir. İnce ayar daha iyi kaliteye neden olabilir, ancak yeni komplikasyonlar ekler. Tüketicilere ince ayar yapmayı ancak daha basit kalite ayarlamalarını keşfettikten sonra ve yalnızca modül yayıncısı tavsiye ettiğinde bakmalarını öneriyoruz.

Tüketiciler İçin

İnce ayar etkinleştirmek için birlikte modülü örneğini hub.Module(..., trainable=True) onun değişkenleri eğitilebilir yapmak ve ithalat TensorFlow en etmek REGULARIZATION_LOSSES . Modülde birden fazla grafik varyantı varsa, antrenmana uygun olanı seçtiğinizden emin olun. Genellikle, {"train"} etiketli olan budur.

Önceden eğitilmiş ağırlıkları bozmayan bir eğitim rejimi seçin, örneğin sıfırdan eğitime göre daha düşük bir öğrenme oranı.

Yayıncılar için

İnce ayarları tüketiciler için kolaylaştırmak için lütfen aşağıdakilere dikkat edin:

  • İnce ayarın düzenli hale getirilmesi gerekir. Sizin modülü ile ihraç edilmektedir REGULARIZATION_LOSSES seçiminiz koyar budur toplanması, tf.layers.dense(..., kernel_regularizer=...) tüketici aldığı içine ne vb tf.losses.get_regularization_losses() . L1 / L2 düzenlenme kayıplarını tanımlamanın bu yolunu tercih edin.

  • Yayıncı modelinde, tf.train.FtrlOptimizer , tf.train.ProximalGradientDescentOptimizer ve diğer proksimal optimize tf.train.ProximalGradientDescentOptimizer l1_ ve l2_regularization_strength parametreleri aracılığıyla L1 / L2 düzenlemesini tanımlamaktan kaçının. Bunlar modülle birlikte dışa aktarılmaz ve global olarak düzenli güçlendirme ayarlamak tüketici için uygun olmayabilir. Geniş (yani seyrek doğrusal) veya geniş ve derin modellerde L1 düzenlenmesi dışında, bunun yerine bireysel düzenlenme kayıplarını kullanmak mümkün olmalıdır.

  • Bırakma, parti normalizasyonu veya benzer eğitim teknikleri kullanıyorsanız, hiperparametrelerini beklenen birçok kullanımda anlamlı olan değerlere ayarlayın. Bırakma oranının hedef sorunun aşırı takılma eğilimine göre ayarlanması gerekebilir. Parti normalleştirmesinde, momentum (çürüme katsayısı olarak da bilinir), küçük veri kümeleri ve / veya büyük gruplar ile ince ayar yapılabilmesini sağlayacak kadar küçük olmalıdır. Gelişmiş tüketiciler için, kritik hiperparametreler üzerinde kontrol sağlayan bir imza eklemeyi düşünün.