Yeniden Kullanılabilir KaydedilenModeller

giriiş

TensorFlow Hub, diğer varlıkların yanı sıra TensorFlow 2 için SavedModels'e de ev sahipliği yapıyor. obj = hub.load(url) [ daha fazlasını öğrenin ] ile Python programına geri yüklenebilirler. Döndürülen obj tf.saved_model.load() 'un 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 yinelemeli olarak bu türden daha fazla nesne gibi isteğe bağlı niteliklere sahip olabilir.

Bu sayfada, TensorFlow Python programında yeniden kullanılmak üzere yüklenen obj tarafından uygulanacak bir arayüz açıklanmaktadır. Bu arayüze uygun SavedModel'lere Reusable SavedModels adı verilir.

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

TensorFlow Hub ekibi, yukarıdaki anlamda yeniden kullanılması amaçlanan tüm SavedModel'lerde Yeniden Kullanılabilir SavedModel arayüzünün uygulanmasını önerir . tensorflow_hub kütüphanesindeki pek çok yardımcı program, özellikle hub.KerasLayer , bunu uygulamak için SavedModels'ı gerektirir.

SignatureDef'lerle İlişkisi

Bu arayüz, tf.functions ve diğer TF2 özellikleri açısından, TF1'den bu yana mevcut olan ve çıkarım için TF2'de kullanılmaya devam eden (SavedModels'in TF Sunumuna veya TF Lite'a dağıtılması gibi) SavedModel imzalarından farklıdır. Çıkarım 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şki

Yeniden Kullanılabilir Kaydedilen Model, Keras veya Sonnet gibi 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ık olmaksızın, model oluşturma kitaplıkları genelinde yeniden kullanımı kolaylaştırır.

Yeniden Kullanılabilir KaydedilmişModelleri herhangi bir model oluşturma kitaplığına yüklemek veya buradan kaydetmek için bir miktar uyarlama yapılması gerekecektir. Keras için hub.KerasLayer yüklemeyi sağlar ve Keras'ın SavedModel biçimindeki yerleşik kaydetme özelliği, bu arayüzün ü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 özgü "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 arayüzü belirli görevlere yönelik kullanım kurallarıyla geliştirir.

Arayüz tanımı

Nitelikler

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

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

  • variables : tf.Variable nesnelerinin bir listesi; eğitilebilir ve eğitilemez olanlar da dahil olmak üzere olası herhangi bir __call__ çağrımı tarafından kullanılan tüm değişkenleri listeler.

    Bu liste boşsa çıkarılabilir.

  • trainable_variables : v.trainable tüm öğeler için doğru olmasını sağlayacak şekilde tf.Variable 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 yaratıcısı, bunların ince ayar sırasında değiştirilmemesi gerektiğini belirtmek için başlangıçta eğitilebilen bazı değişkenleri burada atlamayı seçebilir.

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

  • regularization_losses : Her biri sıfır girdi alan ve tek bir skaler kayan nokta tensörü döndüren tf.functions listesi. İnce ayar için SavedModel kullanıcısına bunları ek düzenleme koşulları 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.functions etkinlik düzenleyicilerini ifade edemez.)

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

__call__ işlevi

Geri Yüklenen SavedModel obj geri yüklenen bir tf.function olan ve obj aşağıdaki gibi çağrılmasına izin veren bir 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 giriş aktivasyonuyla birlikte konumsal, gerekli bir bağımsız değişken vardır. Onun türü şunlardan biridir:

    • tek bir giriş için tek bir Tensör,
    • isimsiz girişlerin sıralı dizisi için Tensörlerin bir listesi,
    • belirli bir dizi giriş adı tarafından anahtarlanan Tensörlerin bir diktesi.

    (Bu arayüzün gelecekteki revizyonları daha genel yuvalara izin verebilir.) SavedModel oluşturucusu bunlardan birini ve tensör şekillerini ve dtiplerini seçer. Yararlı olduğu durumlarda şeklin bazı boyutları tanımsız olmalıdır (özellikle parti büyüklüğü).

  • Python boolean'ını ( True veya False kabul eden isteğe bağlı bir anahtar kelime argümanı 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 normalizasyonda olduğu gibi), bu ayrım bu argümanla uygulanır. Aksi takdirde bu argüman mevcut olmayabilir.

    __call__ Tensör değerli bir training argümanını kabul etmesi gerekli değildir. Aralarında dağıtım yapılması gerekiyorsa tf.cond() kullanmak arayanın sorumluluğundadır.

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

    • Tensör değerli bağımsız değişkenler için SavedModel oluşturucusu, bunların izin verilen türlerini ve şekillerini tanımlar. tf.function tf.TensorSpec girişiyle izlenen bir bağımsız değişkende Python varsayılan değerini kabul eder. Bu tür argümanlar, __call__ da yer alan sayısal hiperparametrelerin (örneğin, ayrılma oranı) özelleştirilmesine izin vermek için kullanılabilir.

    • Python değerli bağımsız değişkenler için SavedModel oluşturucusu bunların 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 bağımsız değişken kombinasyonları için izlemeler sağlamalıdır. training True ve False arasında değişmesi argümanların izin verilebilirliğini değiştirmemelidir.

Sonuç

obj çağrılmasından elde edilen outputs şunlar olabilir:

  • tek bir çıkış için tek bir Tensör,
  • isimsiz çıkışların sıralı dizisi için Tensörlerin bir listesi,
  • belirli bir çıktı adları kümesiyle anahtarlanan Tensörlerin bir diktesi.

(Bu arayüzün gelecekteki revizyonları daha genel yuvalara izin verebilir.) Dönüş türü Python değerli kwarg'lara bağlı olarak değişebilir. Bu, ekstra çıktılar üreten bayraklara izin verir. SavedModel oluşturucusu, çıktı türlerini ve şekillerini ve bunların girdilere bağımlılığını tanımlar.

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

Yeniden Kullanılabilir Kaydedilen Model, yukarıda açıklandığı şekilde, bunları obj.foo , obj.bar vb. gibi adlandırılmış alt nesnelere yerleştirerek birden fazla 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 örnekte obj.foo.__call__ , obj.foo.variables vb. olacaktır.

Bu arayüzün, çıplak bir tf.function öğesini doğrudan tf.foo olarak ekleme yaklaşımını kapsamadığını unutmayın.

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

Kapanış konuşması

Süreç içi API'lerle ilişki

Bu belge, tf.function ve tf.Variable gibi tf.saved_model.save() ve tf.saved_model.load() yoluyla serileştirme yoluyla gidiş-dönüş hayatta kalan ilkellerden oluşan bir Python sınıfının arayüzünü açıklamaktadır. Ancak arayüz tf.saved_model.save() öğesine aktarılan orijinal nesnede zaten mevcuttu. Bu arayüze uyarlama, tek bir TensorFlow programı dahilinde model oluşturma API'leri arasında model parçalarının alışverişini sağlar.