giriiş
TensorFlow Hub, diğer varlıkların yanı sıra TensorFlow 2 için Kaydedilmiş Modelleri barındırır. Bunlar, obj = hub.load(url) komutuyla bir Python programına geri yüklenebilir [ daha fazla bilgi edinin ]. Döndürülen obj , tf.saved_model.load() işleminin sonucudur (TensorFlow'un Kaydedilmiş Model kılavuzuna bakın). Bu nesne, `tf.functions`, `tf.Variables` (önceden eğitilmiş değerlerinden başlatılan), diğer kaynaklar ve özyinelemeli olarak daha fazla benzer nesne gibi keyfi özniteliklere sahip olabilir.
Bu sayfa, yüklenen obj bir TensorFlow Python programında yeniden kullanılabilmesi için uygulanması gereken bir arayüzü açıklamaktadır. Bu arayüze uyan Kaydedilmiş Modeller, Yeniden Kullanılabilir Kaydedilmiş Modeller olarak adlandırılır.
Yeniden kullanım, obj etrafında daha büyük bir model oluşturmak ve ince ayar yapabilme yeteneğini de içermek anlamına gelir. İnce ayar, yüklenen obj ağırlıkların çevreleyen modelin bir parçası olarak daha fazla eğitilmesi anlamına gelir. Kayıp fonksiyonu ve optimize edici, çevreleyen model tarafından belirlenir; obj yalnızca girdi-çıktı aktivasyonlarının eşlenmesini ("ileri geçiş") tanımlar ve bu, dropout veya toplu normalleştirme gibi teknikleri içerebilir.
TensorFlow Hub ekibi, yukarıda belirtilen anlamda yeniden kullanılmak üzere tasarlanmış tüm SavedModel'lerde Reusable SavedModel arayüzünün uygulanmasını önermektedir . tensorflow_hub kütüphanesindeki birçok yardımcı program, özellikle hub.KerasLayer , SavedModel'lerin bu arayüzü uygulamasını gerektirir.
SignatureDefs ile İlişkisi
tf.functions ve diğer TF2 özellikleri açısından bu arayüz, TF1'den beri mevcut olan ve TF2'de çıkarım için (örneğin SavedModel'leri TF Serving veya TF Lite'a dağıtmak gibi) kullanılmaya devam eden SavedModel imzalarından ayrıdır. Çıkarım için kullanılan imzalar, ince ayarı destekleyecek kadar ifade gücüne sahip değildir ve tf.function yeniden kullanılan model için daha doğal ve ifade gücüne sahip bir Python API'si sağlar.
Model oluşturma kütüphaneleriyle ilişkisi
Yeniden kullanılabilir bir SavedModel, Keras veya Sonnet gibi belirli bir model oluşturma kütüphanesinden bağımsız olarak yalnızca TensorFlow 2 temel öğelerini kullanır. Bu, orijinal model oluşturma koduna olan bağımlılıklardan arınmış olarak, model oluşturma kütüphaneleri arasında yeniden kullanımı kolaylaştırır.
Yeniden kullanılabilir Kaydedilmiş Modelleri herhangi bir model oluşturma kütüphanesine yüklemek veya bu kütüphaneden kaydetmek için bir miktar uyarlama gerekecektir. Keras için, hub.KerasLayer yüklemeyi sağlar ve Keras'ın Kaydedilmiş Model formatındaki yerleşik kaydetme özelliği, bu arayüzün bir üst kümesini sağlamak amacıyla TF2 için yeniden tasarlanmıştır (Mayıs 2019 tarihli RFC'ye bakın).
Göreve özgü "Ortak KaydedilmişModel API'leri" ile ilişkisi
Bu sayfadaki arayüz tanımı, herhangi bir sayıda ve türde giriş ve çıkışa izin verir. TF Hub için Ortak KaydedilmişModel API'leri, modellerin kolayca değiştirilebilir olmasını sağlamak için bu genel arayüzü belirli görevler için kullanım kurallarıyla iyileştirir.
Arayüz tanımı
Özellikler
Yeniden kullanılabilir bir SavedModel, obj = tf.saved_model.load(...) ifadesinin aşağıdaki özelliklere sahip bir nesne döndürdüğü bir TensorFlow 2 SavedModel'dir.
__call__. Gerekli. Aşağıdaki şartnameye tabi olarak modelin hesaplamasını ("ileri geçiş") uygulayan bir tf.function.variables: tf.Variable nesnelerinin bir listesi;__call__yönteminin olası tüm çağrımlarında kullanılan tüm değişkenleri listeler, hem eğitilebilir hem de eğitilemez olanları içerir.Bu liste boşsa atlanabilir.
trainable_variables:v.trainabletüm öğeler için doğru olan tf.Variable nesnelerinin bir listesi. Bu değişkenler,variablesbir alt kümesi olmalıdır. Bunlar, nesnenin ince ayarı yapılırken eğitilecek değişkenlerdir. SavedModel oluşturucusu, ince ayar sırasında değiştirilmemeleri gerektiğini belirtmek için başlangıçta eğitilebilir olan bazı değişkenleri burada atlamayı seçebilir.Bu liste boşsa, özellikle SavedModel ince ayar özelliğini desteklemiyorsa, atlanabilir.
regularization_losses: Her biri sıfır girdi alan ve tek bir skalar float tensör döndüren tf.functions listesi. İnce ayar için, SavedModel kullanıcısının bunları kayıp fonksiyonuna ek düzenleme terimleri olarak (en basit durumda daha fazla ölçeklendirme olmadan) dahil etmesi önerilir. Genellikle bunlar ağırlık düzenleyicilerini temsil etmek için kullanılır. (Girdi eksikliği nedeniyle, bu tf.functions aktivite düzenleyicilerini ifade edemez.)Bu liste boşsa, özellikle SavedModel ince ayarı desteklemiyorsa veya ağırlık düzenlemesi uygulamak istemiyorsa, atlanabilir.
__call__ fonksiyonu
Geri yüklenmiş bir SavedModel obj olan obj.__call__ özniteliği, geri yüklenmiş bir tf.function'dır ve obj aşağıdaki gibi çağrılmasına olanak tanır.
Özet (sözde kod):
outputs = obj(inputs, trainable=..., **kwargs)
Tartışmalar
Argümanlar şu şekildedir.
SavedModel'in giriş aktivasyonları grubunda, konum belirten ve zorunlu bir argüman bulunmaktadır. Bu argümanın türü şunlardan biridir:
- Tek bir girdi için tek bir Tensor,
- İsimsiz girdilerin sıralı dizisi için bir Tensor listesi,
- Belirli bir girdi adları kümesiyle anahtarlanmış Tensor'lardan oluşan bir sözlük.
(Bu arayüzün gelecekteki revizyonları daha genel yuvalamalara izin verebilir.) SavedModel oluşturucusu bunlardan birini ve tensör şekillerini ve veri tiplerini seçer. Gerektiğinde, şeklin bazı boyutları tanımlanmamış olmalıdır (özellikle toplu işlem boyutu).
İsteğe bağlı olarak, Python boolean değeri olan
TrueveyaFalsekabul eden bir `traininganahtar kelime argümanı olabilir. Varsayılan değerFalse. Model ince ayar yapmayı destekliyorsa ve hesaplaması iki yöntem arasında farklılık gösteriyorsa (örneğin, dropout ve batch normalization'da olduğu gibi), bu ayrım bu argümanla uygulanır. Aksi takdirde, bu argüman bulunmayabilir.__call__Tensor değerli birtrainingargümanı kabul etmesi zorunlu değildir. Gerekirse aralarında yönlendirme yapmak içintf.cond()kullanmak çağıranın sorumluluğundadır.SavedModel oluşturucusu, belirli adlara sahip daha fazla isteğe bağlı
kwargskabul etmeyi seçebilir.Tensor değerli argümanlar için, SavedModel oluşturucusu bunların izin verilen veri tiplerini ve şekillerini tanımlar.
tf.functiontf.TensorSpec girdisiyle izlenen bir argüman üzerinde Python varsayılan değerini kabul eder. Bu tür argümanlar,__call__içinde yer alan sayısal hiperparametrelerin (örneğin, dropout oranı) özelleştirilmesine olanak sağlamak için kullanılabilir.Python değerlerine sahip argümanlar için, SavedModel oluşturucusu bunların izin verilen değerlerini tanımlar. Bu tür argümanlar, izlenen fonksiyonda ayrı ayrı seçimler yapmak için bayrak olarak kullanılabilir (ancak izlemelerin kombinatoryal patlamasına dikkat edin).
Geri yüklenen __call__ fonksiyonu, izin verilen tüm argüman kombinasyonları için izler sağlamalıdır. True ve False arasında training değiştirilmesi, argümanların izin verilebilirliğini değiştirmemelidir.
Sonuç
obj fonksiyonunu çağırmanın outputs şunlar olabilir:
- Tek bir çıktı için tek bir Tensor,
- İsimsiz çıktıların sıralı dizisi için bir Tensor listesi,
- Belirli bir çıktı adları kümesiyle anahtarlanmış Tensor'lardan oluşan bir sözlük.
(Bu arayüzün gelecekteki revizyonları daha genel iç içe geçmelere izin verebilir.) Dönüş türü, Python değerine sahip kwargs'a bağlı olarak değişebilir. Bu, ek çıktılar üreten bayraklara olanak tanır. SavedModel oluşturucusu, çıktı veri tiplerini ve şekillerini ve bunların girdilere olan bağımlılığını tanımlar.
Adlandırılmış çağrılabilirler
Yeniden kullanılabilir bir SavedModel, yukarıda açıklanan şekilde, örneğin obj.foo , obj.bar vb. gibi adlandırılmış alt nesnelere yerleştirerek birden fazla model parçası sağlayabilir. Her alt nesne, o model parçasına özgü değişkenler vb. hakkında destekleyici öznitelikler ve bir __call__ yöntemi sağlar. Yukarıdaki örnekte, obj.foo.__call__ , obj.foo.variables vb. olacaktır.
Bu arayüzün, tf.function'ı doğrudan tf.foo olarak ekleme yaklaşımını kapsamadığını unutmayın.
Yeniden Kullanılabilir KaydedilmişModelleri kullananların yalnızca tek seviyeli iç içe geçmeyi ( obj.bar , ancak obj.bar.baz değil) ele almaları beklenir. (Bu arayüzün gelecekteki revizyonları daha derin iç içe geçmeye izin verebilir ve en üst düzey nesnenin kendisinin çağrılabilir olması gerekliliğinden vazgeçebilir.)
Kapanış konuşması
İşlem içi API'lerle ilişkisi
Bu belge, tf.function ve tf.Variable gibi temel öğelerden oluşan ve tf.saved_model.save() ve tf.saved_model.load() aracılığıyla serileştirme yoluyla gidiş-dönüş yolculuğundan sağ kurtulan bir Python sınıfının arayüzünü açıklamaktadır. Ancak, bu arayüz zaten tf.saved_model.save() 'e geçirilen orijinal nesnede mevcuttu. Bu arayüze uyarlama, tek bir TensorFlow programı içinde model oluşturma API'leri arasında model parçalarının alışverişini mümkün kılar.