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.trainablenesnelerinin listesi. Bu değişkenler,
variablesbir 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,
Trueveya
Falsekabul eden isteğe bağlı bir anahtar kelime bağımsız değişken
trainingolabilir. 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
trainingargü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ı
kwargskabul 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.