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, Keras optimize ediciler için yeni varsayılan öğrenme oranlarına sahiptir.
- TF2, metriklerin oturum açtığı "adı" değiştirmiş olabilir .
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.
- 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. - Eski
tf.contrib
sembollerini kaldırın ( TF Eklentileri ve TF-Slim'i kontrol edin). - 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.
- Eğitim döngüleri ve modelleri kaydetme/yükleme için TF1.x kodunuzu TF2 eşdeğerlerine yükseltin.
- (İ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.