TF1.x -> TF2 geçişine genel bakış

TensorFlow 2, çeşitli yönlerden temel olarak TF1.x'ten farklıdır. Değiştirilmemiş TF1.x kodunu ( contrib hariç ) TF2 ikili kurulumlarına karşı şu şekilde çalıştırabilirsiniz:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

Ancak bu, TF2 davranışlarını ve API'lerini çalıştırmaz ve TF2 için yazılan kodla beklendiği gibi çalışmayabilir. TF2 davranışları etkin halde çalışmıyorsanız, TF1.x'i etkili bir şekilde TF2 kurulumunun üzerinde çalıştırıyorsunuz demektir. TF2'nin TF1.x'ten ne kadar farklı olduğu hakkında daha fazla ayrıntı için TF1 ve TF2 davranışları kılavuzunu okuyun.

Bu kılavuz, TF1.x kodunuzu TF2'ye geçirme sürecine genel bir bakış sağlar. Bu, yeni ve gelecekteki özellik iyileştirmelerinden yararlanmanıza ve ayrıca kodunuzu daha basit, daha performanslı ve bakımı daha kolay hale getirmenize olanak tanır.

tf.keras üst düzey API'lerini kullanıyorsanız ve yalnızca model.fit ile eğitim alıyorsanız, kodunuz aşağıdaki uyarılar dışında aşağı yukarı TF2 ile tamamen uyumlu olmalıdır:

TF2 geçiş süreci

Geçiş yapmadan önce kılavuzu okuyarak TF1.x ile TF2 arasındaki davranış ve API farkları hakkında bilgi edinin.

  1. TF1.x API kullanımınızın bir kısmını tf.compat.v1 dönüştürmek için otomatik komut dosyasını çalıştırın.
  2. Eski tf.contrib sembollerini kaldırın ( TF Eklentileri ve TF-Slim'i kontrol edin).
  3. TF1.x model ileri paslarınızın TF2'de istekli yürütme etkinleştirilmiş olarak çalıştırılmasını sağlayın.
  4. Eğitim döngüleri ve modelleri kaydetme/yükleme için TF1.x kodunuzu TF2 eşdeğerlerine yükseltin.
  5. (İsteğe bağlı) TF2 uyumlu tf.compat.v1 API'lerinizi deyimsel TF2 API'lerine taşıyın.

Aşağıdaki bölümler yukarıda özetlenen adımları genişletmektedir.

Sembol dönüştürme komut dosyasını çalıştırın

Bu, kod simgelerinizi TF 2.x ikili dosyalarına karşı çalışacak şekilde yeniden yazarken bir ilk geçiş gerçekleştirir, ancak kodunuzu TF 2.x'e özgü hale getirmez ve kodunuzu otomatik olarak TF2 davranışlarıyla uyumlu hale getirmez.

Kodunuz büyük olasılıkla yer tutuculara, oturumlara, koleksiyonlara ve diğer TF1.x tarzı işlevlere erişmek için tf.compat.v1 uç noktalarını kullanmaya devam edecektir.

Sembol dönüştürme komut dosyasının kullanımına ilişkin en iyi uygulamalar hakkında daha fazla bilgi edinmek için kılavuzu okuyun.

tf.contrib kullanımını kaldırın

tf.contrib modülü kullanımdan kaldırıldı ve alt modüllerinin birçoğu çekirdek TF2 API'sine entegre edildi. Diğer alt modüller artık TF IO ve TF Eklentileri gibi diğer projelere ayrılmaktadır.

Eski TF1.x kodunun büyük bir kısmı, TF1.x ile tf.contrib.layers olarak paketlenmiş olan Slim kitaplığını kullanır. Slim kodunuzu TF2'ye geçirirken Slim API kullanımlarınızı tf-slim pip paketini işaret edecek şekilde değiştirin. Ardından Slim kodunu nasıl dönüştüreceğinizi öğrenmek için model eşleme kılavuzunu okuyun.

Alternatif olarak, Slim'in önceden eğitilmiş modellerini kullanıyorsanız, Keras'ın tf.keras.applications önceden eğitilmiş modellerini veya orijinal Slim kodundan dışa aktarılan TF Hub'ın TF2 SavedModel denemeyi düşünebilirsiniz.

TF1.x model ileri paslarının TF2 davranışları etkin olarak çalıştırılmasını sağlayın

Değişkenleri ve kayıpları izleyin

TF2 küresel koleksiyonları desteklemez.

TF2'de hevesli yürütme, tf.Graph koleksiyon tabanlı API'leri desteklemez. Bu, değişkenleri nasıl oluşturduğunuz ve takip ettiğinizi etkiler.

Yeni TF2 kodu için v1.get_variable yerine tf.Variable kullanırsınız ve değişkenleri toplamak ve izlemek için tf.compat.v1.variable_scope yerine Python nesnelerini kullanırsınız. Tipik olarak bu aşağıdakilerden biri olacaktır:

Değişken listelerini ( tf.Graph.get_collection(tf.GraphKeys.VARIABLES) gibi) Layer , Module veya Model nesnelerinin .variables ve .trainable_variables nitelikleriyle birleştirin.

Layer ve Model sınıfları, genel koleksiyon ihtiyacını ortadan kaldıran diğer birçok özelliği uygular. Bunların .losses özelliği, tf.GraphKeys.LOSSES koleksiyonunu kullanmanın yerini alabilir.

Mevcut get_variable variable_scope tabanlı kodunuzu Layers , Models ve Modules içine yerleştirmek için TF2 kod modelleme dolgularını kullanma hakkında daha fazla bilgi edinmek için model eşleme kılavuzunu okuyun. Bu, büyük yeniden yazmalar olmadan etkinleştirilmiş istekli yürütme ile ileri geçişleri yürütmenize olanak tanır.

Diğer davranış değişikliklerine uyum sağlama

Model eşleme kılavuzu tek başına modelinizin daha ayrıntılı olabilecek diğer davranış değişikliklerini çalıştırarak ilerlemesini sağlamak için yetersizse, diğer davranış değişiklikleri ve bunlara nasıl uyum sağlayabileceğiniz hakkında bilgi edinmek için TF1.x ve TF2 davranışları hakkındaki kılavuza bakın. . Ayrıca ayrıntılar için alt sınıflandırma kılavuzu aracılığıyla yeni Katmanlar ve Modeller oluşturma konusuna da göz atın.

Sonuçlarınız doğrulanıyor

Kolay araçlar ve istekli yürütme etkinleştirildiğinde modelinizin doğru davrandığını (sayısal olarak) nasıl doğrulayabileceğinize ilişkin rehberlik için model doğrulama kılavuzuna bakın. Bunu özellikle model eşleme kılavuzuyla eşleştirildiğinde yararlı bulabilirsiniz.

Eğitimi, değerlendirmeyi ve kodu içe/dışa aktarmayı yükseltme

v1.Session -style tf.estimator.Estimator ve diğer koleksiyon tabanlı yaklaşımlarla oluşturulan TF1.x eğitim döngüleri, TF2'nin yeni davranışlarıyla uyumlu değildir. TF1.x eğitim kodunuzun tamamını TF2 koduyla birleştirmeniz beklenmeyen davranışlara neden olabileceğinden taşımanız önemlidir.

Bunu yapmak için çeşitli stratejiler arasından seçim yapabilirsiniz.

En üst düzey yaklaşım tf.keras kullanmaktır. Keras'taki üst düzey işlevler, kendi eğitim döngünüzü yazarsanız gözden kaçırılması kolay olabilecek birçok düşük düzeyli ayrıntıyı yönetir. Örneğin, düzenlileştirme kayıplarını otomatik olarak toplarlar ve modeli çağırırken training=True bağımsız değişkenini ayarlarlar.

Vanilya ve özel tf.keras eğitim döngülerini kullanmak üzere tf.estimator.Estimator kodunu nasıl taşıyabileceğinizi öğrenmek için Tahminci geçiş kılavuzuna bakın.

Özel eğitim döngüleri, tek tek katmanların ağırlıklarını takip etmek gibi, modeliniz üzerinde daha iyi kontrol sahibi olmanızı sağlar. Model ağırlıklarını almak ve modeli güncellemek için bunları kullanmak üzere tf.GradientTape nasıl kullanılacağını öğrenmek için sıfırdan eğitim döngüleri oluşturma kılavuzunu okuyun.

TF1.x iyileştiricilerini Keras iyileştiricilerine dönüştürün

tf.compat.v1.train içindeki Adam optimizer ve degrade iniş optimizer gibi optimize edicilerin tf.keras.optimizers eşdeğerleri vardır.

Aşağıdaki tablo, bu eski optimize edicileri Keras eşdeğerlerine nasıl dönüştürebileceğinizi özetlemektedir. Ek adımlar gerekmediği sürece ( varsayılan öğrenme oranının güncellenmesi gibi) TF1.x sürümünü doğrudan TF2 sürümüyle değiştirebilirsiniz.

Optimize edicilerinizi dönüştürmenin eski kontrol noktalarını uyumsuz hale getirebileceğini unutmayın.

TF1.x TF2 Ek adımlar
`tf.v1.train.GradientDescentOptimizer` tf.keras.optimizers.SGD Hiçbiri
'tf.v1.train.MomentumOptimizer' tf.keras.optimizers.SGD "Momentum" argümanını ekleyin
'tf.v1.train.AdamOptimizer' tf.keras.optimizers.Adam "beta1" ve "beta2" bağımsız değişkenlerini "beta_1" ve "beta_2" olarak yeniden adlandırın
'tf.v1.train.RMSPropOptimizer' tf.keras.optimizers.RMSprop 'Çürüme' argümanını 'rho' olarak yeniden adlandırın
'tf.v1.train.AdadeltaOptimizer' tf.keras.optimizers.Adadelta Hiçbiri
'tf.v1.train.AdagradOptimizer' tf.keras.optimizers.Adagrad Hiçbiri
'tf.v1.train.FtrlOptimizer' tf.keras.optimizers.Ftrl "Birikim_adı" ve "doğrusal_adı" bağımsız değişkenlerini kaldırın
'tf.contrib.AdamaxOptimizer' tf.keras.optimizers.Adamax "Beta1" ve "beta2" bağımsız değişkenlerini "beta_1" ve "beta_2" olarak yeniden adlandırın
'tf.contrib.Nadam' tf.keras.optimizers.Nadam "Beta1" ve "beta2" bağımsız değişkenlerini "beta_1" ve "beta_2" olarak yeniden adlandırın

Veri girişi ardışık düzenlerini yükseltme

Bir tf.keras modeline veri beslemenin birçok yolu vardır. Python oluşturucularını ve Numpy dizilerini girdi olarak kabul edecekler.

Bir modele veri beslemenin önerilen yolu, verileri işlemek için yüksek performanslı sınıfların bir koleksiyonunu içeren tf.data paketini kullanmaktır. tf.data ait dataset verimlidir, anlamlıdır ve TF2 ile iyi bir şekilde bütünleşir.

Doğrudan tf.keras.Model.fit yöntemine aktarılabilirler.

model.fit(dataset, epochs=5)

Doğrudan standart Python üzerinde yinelenebilirler:

for example_batch, label_batch in dataset:
    break

Hala tf.queue kullanıyorsanız, bunlar artık giriş hatları olarak değil, yalnızca veri yapıları olarak desteklenmektedir.

Ayrıca tf.feature_columns kullanan tüm özellik ön işleme kodlarını da taşımalısınız. Daha fazla ayrıntı için geçiş kılavuzunu okuyun.

Modelleri kaydetme ve yükleme

TF2 nesne tabanlı kontrol noktaları kullanır. İsme dayalı TF1.x denetim noktalarından geçiş hakkında daha fazla bilgi edinmek için denetim noktası geçiş kılavuzunu okuyun. Ayrıca temel TensorFlow belgelerindeki kontrol noktaları kılavuzunu da okuyun.

Kaydedilen modeller için önemli bir uyumluluk sorunu yoktur. TF1.x'teki SavedModel TF2'ye geçirme hakkında daha fazla bilgi için SavedModel kılavuzunu okuyun. Genel olarak,

  • TF1.x kaydedilen_modeller TF2'de çalışır.
  • TF2 kaydedilen_modeller, tüm işlemler destekleniyorsa TF1.x'te çalışır.

Ayrıca Graph.pb ve Graph.pbtxt nesneleriyle çalışma hakkında daha fazla bilgi için SavedModel geçiş kılavuzundaki GraphDef bölümüne bakın.

(İsteğe bağlı) tf.compat.v1 sembollerini taşıyın

tf.compat.v1 modülü, orijinal semantiğiyle birlikte TF1.x API'sinin tamamını içerir.

Yukarıdaki adımları izledikten ve tüm TF2 davranışlarıyla tamamen uyumlu bir kod elde ettikten sonra bile, TF2 ile uyumlu olan compat.v1 API'sinden pek çok kez söz edilmesi muhtemeldir. Yazdığınız herhangi bir yeni kod için bu eski compat.v1 api'lerini kullanmaktan kaçınmalısınız, ancak bunlar önceden yazılmış kodunuz için çalışmaya devam edecektir.

Ancak mevcut kullanımları eski olmayan TF2 API'lerine taşımayı seçebilirsiniz. Bireysel compat.v1 sembollerinin dokümanları genellikle bunların eski olmayan TF2 API'lerine nasıl taşınacağını açıklayacaktır. Ek olarak, model eşleme kılavuzunun deyimsel TF2 API'lerine artımlı geçişle ilgili bölümü de bu konuda yardımcı olabilir.

Kaynaklar ve daha fazla okuma

Daha önce de belirtildiği gibi, tüm TF1.x kodunuzu TF2'ye taşımak iyi bir uygulamadır. Daha fazla bilgi edinmek için TensorFlow kılavuzunun TF2'ye Geçiş bölümündeki kılavuzları okuyun.