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şkenlervariables
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
veyaFalse
kabul eden isteğe bağlı bir anahtar kelime argümanıtraining
olabilir. VarsayılanFalse
. 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 birtraining
argümanını kabul etmesi gerekli değildir. Aralarında dağıtım yapılması gerekiyorsatf.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.