Yeniden Kullanılabilir Kaydedilmiş Modeller

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Tanıtım

TensorFlow Hub, diğer varlıkların yanı sıra TensorFlow 2 için SavedModels'i barındırır. obj = hub.load(url) [ daha fazla bilgi ] ile bir Python programına geri yüklenebilirler. Döndürülen obj , tf.saved_model.load() sonucudur (bkz. TensorFlow'un SavedModel kılavuzu ). Bu nesne, tf.functions, tf.Variables (önceden eğitilmiş değerlerinden başlatılmış), diğer kaynaklar ve özyinelemeli olarak daha fazla bu tür nesneler gibi isteğe bağlı niteliklere sahip olabilir.

Bu sayfa, bir TensorFlow Python programında yeniden kullanılmak üzere yüklenen obj tarafından uygulanacak bir arabirimi açıklar. Bu arabirime uyan SavedModel'ler, Yeniden Kullanılabilir SavedModel'ler olarak adlandırılır.

Yeniden kullanma, ince ayar yapma yeteneği de dahil olmak üzere obj etrafında daha büyük bir model oluşturmak anlamına gelir. İnce ayar, çevreleyen modelin bir parçası olarak yüklenen obj ağırlıkların daha fazla eğitimi anlamına gelir. Kayıp fonksiyonu ve optimize edici, çevreleyen model tarafından belirlenir; obj , muhtemelen bırakma veya toplu normalleştirme gibi teknikleri içeren, yalnızca girdinin çıktı aktivasyonlarına ("ileri geçiş") eşlenmesini tanımlar.

TensorFlow Hub ekibi, yukarıdaki anlamda yeniden kullanılması amaçlanan tüm SavedModel'lerde Yeniden Kullanılabilir SavedModel arabiriminin uygulanmasını önerir . tensorflow_hub kitaplığındaki birçok yardımcı program, özellikle hub.KerasLayer , onu uygulamak için SavedModels gerektirir.

SignatureDefs ile İlişkisi

tf.functions ve diğer TF2 özellikleri açısından bu arayüz, SavedModel'in TF1'den beri mevcut olan ve çıkarım için TF2'de kullanılmaya devam eden imzalarından farklıdır (SavedModels'i TF Serving veya TF Lite'a dağıtmak gibi). Çıkarım için imzalar, ince ayarı destekleyecek kadar anlamlı değildir ve tf.function , yeniden kullanılan model için daha doğal ve etkileyici bir Python API'si sağlar.

Model oluşturma kitaplıklarıyla ilişkisi

Yeniden Kullanılabilir SavedModel, Keras veya Sonnet gibi belirli herhangi bir model oluşturma kitaplığından bağımsız olarak yalnızca TensorFlow 2 temel öğelerini kullanır. Bu, orijinal model oluşturma koduna bağımlılıklardan bağımsız olarak model oluşturma kitaplıklarında yeniden kullanımı kolaylaştırır.

Yeniden Kullanılabilir SavedModel'leri herhangi bir model oluşturma kitaplığına yüklemek veya bu kitaplıktan kaydetmek için bir miktar uyarlama gerekecektir. Keras için hub.KerasLayer yükleme sağlar ve Keras'ın SavedModel biçimindeki yerleşik kaydetme özelliği, bu arabirimin bir üst kümesini sağlamak amacıyla TF2 için yeniden tasarlanmıştır (Mayıs 2019'dan itibaren RFC'ye bakın).

Göreve özel "Ortak SavedModel API'leri" ile ilişki

Bu sayfadaki arayüz tanımı, herhangi bir sayıda ve türde giriş ve çıkışa izin verir. TF Hub için Ortak SavedModel API'leri, modelleri kolayca değiştirilebilir hale getirmek için bu genel arabirimi belirli görevler için kullanım kurallarıyla iyileştirir.

Arayüz tanımı

Öznitellikler

Yeniden Kullanılabilir SavedModel, bir TensorFlow 2 SavedModel'dir, öyle ki obj = tf.saved_model.load(...) aşağıdaki özniteliklere sahip bir nesne döndürür

  • __call__ . Gerekli. Aşağıdaki spesifikasyona tabi olarak modelin hesaplamasını ("ileri geçiş") uygulayan bir tf.fonksiyonu.

  • variables : Hem eğitilebilir hem de eğitilemez olanlar dahil olmak üzere, __call__ olası herhangi bir çağrısı tarafından kullanılan tüm değişkenleri listeleyen tf.Variable nesnelerinin bir listesi.

    Bu liste boşsa atlanabilir.

  • trainable_variables : v.trainable tüm öğeler için geçerli olacak şekilde v.trainable nesnelerinin listesi. Bu değişkenler, variables bir alt kümesi olmalıdır. Bunlar, nesneye ince ayar yapılırken eğitilecek değişkenlerdir. SavedModel oluşturucu, ince ayar sırasında değiştirilmemeleri gerektiğini belirtmek için başlangıçta eğitilebilir olan bazı değişkenleri burada çıkarmayı seçebilir.

    Bu liste boşsa, özellikle SavedModel ince ayarı desteklemiyorsa atlanabilir.

  • regularization_losses : Her biri sıfır girdi alan ve tek bir skaler kayan noktalı tensör döndüren bir tf.fonksiyon listesi. İnce ayar için, SavedModel kullanıcısına bunları ek düzenleme terimleri olarak kayba dahil etmesi önerilir (en basit durumda daha fazla ölçeklendirme olmadan). Tipik olarak, bunlar ağırlık düzenleyicileri temsil etmek için kullanılır. (Girdi eksikliği nedeniyle, bu tf.işlevleri etkinlik düzenleyicilerini ifade edemez.)

    Bu liste boşsa, özellikle SavedModel ince ayarı desteklemiyorsa veya ağırlık düzenlemesini önermek istemiyorsa atlanabilir.

__call__ işlevi

Geri Yüklenen SavedModel nesnesi, geri yüklenen bir obj olan ve nesnenin aşağıdaki gibi çağrılmasına izin veren bir obj obj.__call__ özniteliğine sahiptir.

Özet (sözde kod):

outputs = obj(inputs, trainable=..., **kwargs)

Argümanlar

Argümanlar aşağıdaki gibidir.

  • SavedModel'in bir grup girdi aktivasyonu ile bir konumsal, gerekli argüman vardır. Onun türü biridir

    • tek bir giriş için tek bir Tensör,
    • sıralı bir adsız giriş dizisi için bir Tensör listesi,
    • belirli bir girdi adları kümesi tarafından anahtarlanmış bir Tensör diktisi.

    (Bu arayüzün gelecekteki revizyonları daha genel yuvalara izin verebilir.) SavedModel yaratıcısı bunlardan birini ve tensör şekillerini ve tiplerini seçer. Kullanışlı olduğu durumlarda, şeklin bazı boyutları tanımsız olmalıdır (özellikle parti boyutu).

  • Python boolean, True veya False kabul eden isteğe bağlı bir anahtar kelime bağımsız değişken training olabilir. Varsayılan, False . Model ince ayarı destekliyorsa ve hesaplaması ikisi arasında farklılık gösteriyorsa (örneğin, bırakma ve toplu normalleştirmede olduğu gibi), bu ayrım bu argümanla uygulanır. Aksi takdirde, bu argüman eksik olabilir.

    __call__ Tensör değerli bir training argümanını kabul etmesi gerekli değildir. Aralarında gönderme yapmak gerekirse tf.cond() kullanmak arayan kişiye düşer.

  • SavedModel yaratıcısı, belirli adların daha isteğe bağlı kwargs kabul etmeyi seçebilir.

    • Tensör değerli argümanlar için SavedModel yaratıcısı, izin verilen türlerini ve şekillerini tanımlar. tf.function , bir tf.TensorSpec girdisiyle izlenen bir bağımsız değişken üzerinde bir Python varsayılan değerini kabul eder. Bu tür argümanlar, __call__ ile ilgili sayısal hiperparametrelerin özelleştirilmesine izin vermek için kullanılabilir (örneğin, bırakma oranı).

    • Python değerli bağımsız değişkenler için SavedModel oluşturucu, izin verilen değerlerini tanımlar. Bu tür argümanlar, izlenen fonksiyonda ayrık seçimler yapmak için bayraklar olarak kullanılabilir (ancak izlerin kombinatoryal patlamasına dikkat edin).

Geri yüklenen __call__ işlevi, izin verilen tüm argüman kombinasyonları için izler sağlamalıdır. True ve False arasındaki training ters çevrilmesi, argümanların izin verilebilirliğini değiştirmemelidir.

Sonuç

obj çağırmanın outputs şunlar olabilir:

  • tek bir çıkış için tek bir Tensör,
  • sıralı bir adsız çıktı dizisi için bir Tensör listesi,
  • belirli bir çıktı adı kümesi tarafından anahtarlanan Tensörlerin bir dikti.

(Bu arabirimin gelecekteki revizyonları daha genel yuvalara izin verebilir.) Dönüş türü, Python değerli kwarg'lara bağlı olarak değişebilir. Bu, bayrakların ekstra çıktılar üretmesine izin verir. SavedModel yaratıcısı, çıktı türlerini ve şekillerini ve bunların girdilere olan bağımlılıklarını tanımlar.

Adlandırılmış çağrılar

Yeniden Kullanılabilir SavedModel, yukarıda açıklanan şekilde, örneğin obj.foo , obj.bar vb. gibi adlandırılmış alt nesnelere yerleştirerek birden çok model parçası sağlayabilir. Her alt nesne, bir __call__ yöntemi ve o model parçasına özgü değişkenler vb. hakkında destekleyici nitelikler sağlar. Yukarıdaki örnek için obj.foo.__call__ , obj.foo.variables vb. olabilir.

Bu arabirimin doğrudan tf.foo olarak çıplak bir tf.function ekleme yaklaşımını kapsamadığını unutmayın .

Yeniden Kullanılabilir SavedModels kullanıcılarının yalnızca bir düzey iç içe yerleştirmeyi ( obj.bar , obj.bar.baz değil ) işlemesi beklenir. (Bu arabirimin gelecekteki revizyonları daha derin iç içe yerleştirmeye izin verebilir ve en üst düzey nesnenin kendisinin çağrılabilir olması gerekliliğinden feragat edebilir.)

Kapanış konuşması

İşlem içi API'lerle ilişkisi

Bu belge, tf.saved_model.save() ve tf.saved_model.load() yoluyla serileştirme yoluyla bir gidiş-dönüşte hayatta kalan tf.function ve tf.Variable gibi ilkellerden oluşan bir Python sınıfının arabirimini açıklar. Ancak arabirim, tf.saved_model.save() iletilen orijinal nesnede zaten mevcuttu. Bu arayüze uyum, tek bir TensorFlow programı içinde model oluşturma API'leri arasında model parçalarının değiş tokuşunu sağlar.