Yardım Kaggle üzerinde TensorFlow ile Büyük Bariyer Resifi korumak Meydan Üyelik

TensorFlow sürüm uyumluluğu

Bu belge, TensorFlow'un farklı sürümleri arasında (kod veya veri için) geriye dönük uyumluluğa ihtiyaç duyan kullanıcılar ve uyumluluğu korurken TensorFlow'u değiştirmek isteyen geliştiriciler içindir.

Anlamsal sürüm 2.0

TensorFlow Semantik Versioning 2.0 (şu semver kamu API için). TensorFlow her sürümünü formu vardır MAJOR.MINOR.PATCH . Örneğin, TensorFlow sürüm 1.2.3 sahip MAJOR sürüm 1, MINOR sürüm 2 ve PATCH versiyonu aşağıdaki anlamlara sahiptir her numara için 3. değişiklikler:

  • ÖNEMLİ: Potansiyel geriye uyumsuz değişir. Önceki bir ana sürümle çalışan kod ve veriler, yeni sürümle mutlaka çalışmayacaktır. Ancak bazı durumlarda mevcut TensorFlow grafikleri ve kontrol noktaları daha yeni sürüme geçirilebilir; bkz grafikler ve kontrol noktası Uyumluluğu veri uyumluluğu ile ilgili detaylar için.

  • KÜÇÜK: değişmeden çalışmaya devam edeceğiz sadece sigara deneysel kamu API bağlı olan bir önceki minör serbest bırakılması ve birlikte çalıştı geriye doğru uyumlu özellikler, hız geliştirmeleri, vb Kod ve veri. Ve toplu API olmadığını dair ayrıntılı bilgi için bkz kaplıdır ne .

  • YAMA: Geriye doğru uyumlu hata düzeltmeleri.

Örneğin, serbest bırakma 1.0.0 serbest 0.12.1 geriye uyumlu değişiklikler yapılmıştır. Bununla birlikte, ayrılabilen 1.1.1 serbest 1.0.0 geriye doğru uyumlu idi.

ne kaplıdır

Yalnızca TensorFlow'un genel API'leri, küçük ve yama sürümleri arasında geriye dönük olarak uyumludur. Genel API'ler şunlardan oluşur:

  • Tüm belgelenmiş Python işlevler ve sınıflar tensorflow modülü ve submodüller için hariç

    • Adını ile başlayan herhangi bir işlev, sınıf, vb: Özel semboller _
    • Deneysel ve tf.contrib sembolleri, bkz aşağıda detayları için.

    Kod söz konusu Not examples/ ve tools/ dizinleri aracılığıyla erişilemiyor tensorflow Python modülü ve böylece uyumluluk garantisi kapsamında değildir.

    Bir sembol aracılığıyla kullanılabilir durumdaysa tensorflow Python modülü veya submodüller ancak belgelenmiş değildir, o zaman ortak API düşünülen planlanmış bir parçası değildir.

  • (Python, uyumluluk API tf.compat modülü). Ana sürümlerde, kullanıcılara yeni bir ana sürüme geçişte yardımcı olmak için yardımcı programlar ve ek uç noktalar yayınlayabiliriz. Bu API sembolleri kullanımdan kaldırılmıştır ve desteklenmemektedir (yani, herhangi bir özellik eklemeyeceğiz ve güvenlik açıklarını düzeltmek dışında hataları düzeltmeyeceğiz), ancak uyumluluk garantilerimiz kapsamındadırlar.

  • Cı API'sı .

  • Aşağıdaki protokol arabellek dosyaları:

Ne kapsamında değildir

TensorFlow'un bazı bölümleri herhangi bir noktada geriye dönük uyumsuz şekillerde değişebilir. Bunlar şunları içerir:

  • Deneysel API'ler: geliştirilmesini kolaylaştırmak için, açıkça uyumluluk teminatlardan deneysel olarak işaretlenmiş bazı API sembollerini muaf. Özellikle, aşağıdakiler herhangi bir uyumluluk garantisi kapsamında değildir:

    • herhangi bir sembol tf.contrib modülü ya da alt birimlerin;
    • ismi içeren bir sembol (modül, fonksiyon, argüman, özelliği, sınıf veya sabit) experimental veya Experimental ; veya
    • tam adı, kendisi deneysel olan bir modül veya sınıf içeren herhangi bir sembol. Bu alanlar ve denilen herhangi protokol tampon submessages içeren experimental .
  • Diğer diller gibi: Python ve C dışındaki dilde TensorFlow API'ler:

  • Kompozit ops detayları: Python birçok kamu işlevleri grafikte birkaç ilkel op genişletin ve bu ayrıntılar olarak diske kaydedilmiş herhangi grafiklerin parçası olacak GraphDef s. Bu ayrıntılar küçük sürümler için değişebilir. Özellikle, grafikler arasında tam eşleşmeyi kontrol eden regresyon testleri, grafiğin davranışının değişmemesi gerekse bile ve mevcut kontrol noktaları çalışmaya devam etse bile, küçük sürümlerde kırılma olasılığı yüksektir.

  • Nokta sayısal ayrıntıları Kayan: oplar tarafından hesaplanan spesifik kayan nokta değerleri her an değişebilir. Kullanıcılar, hesaplanan belirli bitlere değil, yalnızca yaklaşık doğruluk ve sayısal kararlılığa güvenmelidir. Küçük ve yama sürümlerinde sayısal formüllerde yapılan değişiklikler, makine öğreniminde belirli formüllerin geliştirilmiş doğruluğunun genel sistem için doğruluğun azalmasına neden olabileceği uyarısıyla karşılaştırılabilir veya geliştirilmiş doğrulukla sonuçlanmalıdır.

  • Rastgele sayılar: Herhangi bir zamanda değişebilir hesaplanan spesifik rastgele sayılar. Kullanıcılar, hesaplanan belirli bitlere değil, yalnızca yaklaşık olarak doğru dağılımlara ve istatistiksel güce güvenmelidir. Bkz rasgele sayı üretme ayrıntılar için kılavuza.

  • Sürüm dağıtılan Tensorflow çarpıklık: Tek kümede TensorFlow iki farklı versiyonunu Koşu desteklenmiyor. Kablo protokolünün geriye dönük uyumluluğu hakkında hiçbir garanti yoktur.

  • Hatalar: Biz (değil API rağmen) şu anki uygulama açıkça bölünmesi halinde, belgelere çelişen veya eğer olduğunu, değiştirir geriye uyumsuz davranışlar yapma hakkı saklıdır eğer iyi bilinen ve iyi tanımlanmış amaçlanan davranış düzgün nedeniyle uygulanmadı bir hataya. Örneğin, bir optimize edici iyi bilinen bir optimizasyon algoritması uyguladığını iddia ediyor ancak bir hata nedeniyle bu algoritmayla eşleşmiyorsa, optimize ediciyi düzeltiriz. Düzeltmemiz, yakınsama için yanlış davranışa dayanan kodu bozabilir. Bu tür değişiklikleri sürüm notlarında belirteceğiz.

  • Kullanılmayan API: Biz (GitHub arama yoluyla TensorFlow kullanımının denetiminin yapılması ile) hiçbir belgelenmiş yerlerde kullanmaya hangi API'ler için geriye uyumsuz değişiklik yapma hakkı saklıdır. Bu tür bir değişiklik yapmadan önce, üzerinde değişiklik yapmak için geleceklerdir anons @ posta listesi (varsa) herhangi bir kırılma nasıl ele alınacağı için talimatlar veren ve bizim toplumuna, görüşlerinizi paylaşmak için bir şans vermek için iki hafta beklemek .

  • Hata davranışı: Biz olmayan hata davranışı ile hataları değiştirebilir. Örneğin, hata belgelenmiş olsa bile, bir hatayı ortaya çıkarmak yerine bir sonucu hesaplamak için bir işlevi değiştirebiliriz. Ayrıca hata mesajlarının metnini değiştirme hakkımız saklıdır. Ayrıca, belgelerde belirli bir hata koşulu için istisna türü belirtilmedikçe hatanın türü değişebilir.

SavedModellerin, grafiklerin ve kontrol noktalarının uyumluluğu

SavedModel, TensorFlow programlarında kullanmak için tercih edilen serileştirme formatıdır. Olarak kodlanmış bir veya daha fazla grafik: SavedModels iki parça içeren GraphDefs ve bir kontrol noktası. Grafikler, çalıştırılacak operasyonların veri akışını tanımlar ve kontrol noktaları, bir grafikteki değişkenlerin kaydedilmiş tensör değerlerini içerir.

Birçok TensorFlow kullanıcısı SavedModel'ler oluşturur ve bunları daha sonraki bir TensorFlow sürümüyle yükleyip yürütür. Uyarınca semver , TensorFlow biri sürümüyle yazılı SavedModels yüklenebilir ve aynı ana sürümüyle TensorFlow sonraki bir sürümü ile değerlendirildi.

Biz desteklenen SavedModels için ek garantiler. Biz sadece sigara kullanım dışı olmayan deneysel, TensorFlow olmayan uyumluluk API'leri majör sürümü kullanılarak oluşturulan bir SavedModel diyoruz N bir SavedModel sürümü desteklenen N . Herhangi SavedModel TensorFlow büyük versiyonu desteklenen N yüklenebilir ve TensorFlow ana sürüm ile yürütülen N+1 . Ancak, böyle bir modeli oluşturmak veya değiştirmek için gereken işlevsellik artık mevcut olmayabilir, bu nedenle bu garanti yalnızca değiştirilmemiş SavedModel için geçerlidir.

Serileştirilmiş dosyaların uzun süreler boyunca kullanılabilir olması için geriye dönük uyumluluğu mümkün olduğunca uzun süre korumaya çalışacağız.

GraphDef uyumluluğu

Grafikler ile seri hale GraphDef protokolü tamponu. Grafikler geriye uyumluluk söz kolaylaştırmak için, her bir GraphDef TensorFlow versiyondan farklı bir versiyon numarası vardır. Örneğin, GraphDef versiyonu 17 kullanımdan kaldırılmış inv lehine op reciprocal . Semantikler şunlardır:

  • TensorFlow her sürümü bir aralığını destekleyen GraphDef sürümleri. Bu aralık, yama sürümlerinde sabit olacak ve yalnızca küçük sürümlerde artacaktır. Bir desteğini kesmesi GraphDef sürümü sadece TensorFlow önemli serbest bırakılması için ortaya çıkar (ve sadece SavedModels garantili sürüm desteği ile hizalanmış).

  • Yeni oluşturulan grafikler son atanır GraphDef sürüm numarasını.

  • TensorFlow belirli bir versiyonu destekliyorsa GraphDef bir grafik versiyonunu (yukarıda açıklandığı gibi nokta sayısal ayrıntıları ve rastgele sayılar kayan hariç) TensorFlow versiyonu onu üretmek için kullanıldığı gibi, ne olursa olsun büyük bir aynı davranışı ile yüklemek ve değerlendirir TensorFlow'un sürümü. Özellikle, TensorFlow'un bir sürümündeki bir denetim noktası dosyasıyla uyumlu olan bir GraphDef (örneğin, SavedModel'de olduğu gibi), GraphDef desteklendiği sürece sonraki sürümlerde bu denetim noktasıyla uyumlu kalacaktır.

    Kod bir kontrol noktası TensorFlow farklı bir sürümünü çalıştıran aynı kod tarafından oluşturulan kontrol noktaları okumak mümkün olmayabilir okur: Bu GraphDefs (ve SavedModels) tefrika Grafikleri için geçerlidirEND_BOLD unutmayın.

  • Eğer GraphDef üst bir (küçük) sürümdeki X'e artar bağlı alt sınır Örneğin X (burada farazi sürüm numaralarını kullanıyorsanız) yükselmiştir önce, en az altı ay olacaktır:

    • TensorFlow 1.2 destekleyebilir GraphDef 7 sürümlerini 4.
    • TensorFlow 1.3 ekleyebilir GraphDef 8'e sürüm 8 ve destek sürümleri 4.
    • En az altı ay sonra, TensorFlow 2.0.0, sürüm 4 ila 7 için desteği bırakarak yalnızca sürüm 8'i bırakabilir.

    TensorFlow'un ana sürümleri genellikle 6 aydan daha uzun aralıklarla yayınlandığından, yukarıda ayrıntıları verilen desteklenen SavedModels garantilerinin, GraphDefs için 6 aylık garantiden çok daha güçlü olduğunu unutmayın.

Bir destek Son olarak, GraphDef sürümü düştü, biz otomatik olarak yeni desteklenen grafikleri dönüştürmek için araçlar sağlar dener GraphDef sürümü.

TensorFlow'u genişletirken grafik ve kontrol noktası uyumluluğu

Bu bölüm için uyumsuz değişiklikler yaparak yalnızca alakalı olduğunu GraphDef böyle op kaldırarak, op ekleme veya mevcut ops işlevselliğini değiştirilirken olarak biçimi. Önceki bölüm çoğu kullanıcı için yeterli olacaktır.

Geri ve kısmi ileri uyumluluk

Sürüm oluşturma şemamızın üç gereksinimi vardır:

  • Destek yükleme grafikleri ve kontrol noktaları geriye dönük uyumluluk TensorFlow eski sürümleri ile yarattı.
  • Bir grafik ya da kontrol noktasının üretici tüketici önce TensorFlow daha yeni bir sürümü yükseltilir destek senaryolarına ileriye dönük uyumluluk.
  • Uyumsuz yollarla gelişen TensorFlow'u etkinleştirin. Örneğin, işlemleri kaldırma, nitelik ekleme ve nitelikleri kaldırma.

İse bu Not GraphDef versiyonu mekanizması TensorFlow versiyonu ayrıdır, geriye uyumlu değişiklikler GraphDef biçiminde hala Semantik Versioning ile sınırlıdır. Bu araçlar işlevi sadece çıkarılabilecek veya arasında değiştirilebilir MAJOR (örneğin TensorFlow sürümlerinde 1.7 ile 2.0 ). Buna ek olarak, ileriye dönük uyumluluk Yama bültenleri (içinde uygulanır 1.x.1 için 1.x.2 örneğin).

Geriye ve ileriye dönük uyumluluk sağlamak ve biçimlerdeki değişikliklerin ne zaman uygulanacağını bilmek için grafikler ve kontrol noktaları, ne zaman üretildiklerini açıklayan meta verilere sahiptir. Gelişen için ayrıntı Aşağıdaki bölümlerde TensorFlow uygulama ve kurallar GraphDef sürümlerini.

Bağımsız veri sürümü şemaları

Grafikler ve kontrol noktaları için farklı veri sürümleri vardır. İki veri formatı birbirinden farklı hızlarda ve ayrıca TensorFlow'dan farklı hızlarda gelişir. Her iki sürüm sistemleri de tanımlandığı core/public/version.h . Yeni bir sürüm eklendiğinde, başlığa nelerin değiştiğini ve tarihi ayrıntılı olarak açıklayan bir not eklenir.

Veriler, üreticiler ve tüketiciler

Aşağıdaki veri sürümü bilgisi türleri arasında ayrım yaparız:

  • üreticileri: veri üretmek ikili. Yapımcılar bir sürümü (varsa producer ) ve (uyumlu olduğundan minimum tüketici sürümünü min_consumer ).
  • tüketici: tüketim verilerini ikili. Tüketiciler bir sürümü (varsa consumer ) ve (uyumlu olduğundan minimum yapımcı versiyonunu min_producer ).

Sürüm bilgisi verilerin Her parça bir sahiptir VersionDef versions kaydeden alanını producer verileri yapılmış min_consumer o uyumlu olduğunu ve bir listesini bad_consumers izin verilmez sürümleri.

Bir yapımcı bazı verileri yaptığında Varsayılan olarak, veri yapımcının devralır producer ve min_consumer sürümleri. bad_consumers belirli tüketici sürümleri hataları içerdiği bilinen ve kaçınılması gerekiyorsa ayarlanabilir. Aşağıdakilerin tümü doğruysa, bir tüketici bir veri parçasını kabul edebilir:

  • consumer > = verinin min_consumer
  • verinin producer > = tüketicinin min_producer
  • consumer değil verinin içinde bad_consumers

Üretici ve tüketici her ikisi de aynı TensorFlow kod tabanından geldiği için, core/public/version.h ya olarak kabul edilir bir ana veri versiyonu içerir producer ya da consumer bağlama bağlı olarak ve her iki min_consumer ve min_producer (üretici ve tüketici tarafından ihtiyaç duyulan, sırasıyla) . özellikle,

  • İçin GraphDef sürümleri, elimizdeki TF_GRAPH_DEF_VERSION , TF_GRAPH_DEF_VERSION_MIN_CONSUMER ve TF_GRAPH_DEF_VERSION_MIN_PRODUCER .
  • Denetim noktası sürümleri için, elimizdeki TF_CHECKPOINT_VERSION , TF_CHECKPOINT_VERSION_MIN_CONSUMER ve TF_CHECKPOINT_VERSION_MIN_PRODUCER .

Varolan bir operasyona varsayılan olarak yeni bir öznitelik ekleyin

Aşağıdaki yönergeleri takip etmek, yalnızca işlem kümesi değişmediyse size ileriye dönük uyumluluk sağlar:

  1. İleriye dönük uyumluluk isteniyorsa, set strip_default_attrs için True kullanarak modeli verilirken tf.saved_model.SavedModelBuilder.add_meta_graph_and_variables ve tf.saved_model.SavedModelBuilder.add_meta_graph yöntemlerini SavedModelBuilder sınıf veya tf.estimator.Estimator.export_saved_model
  2. Bu, modelleri üretme/dışa aktarma sırasında varsayılan değerli nitelikleri çıkarır. Bu ihraç emin kılan tf.MetaGraphDef varsayılan değer kullanıldığında yeni op-öznitelik içermez.
  3. Bu denetime sahip olmak, güncel olmayan tüketicilerin (örneğin, eğitim ikili dosyalarının gerisinde kalan ikili dosyaların sunulması) modelleri yüklemeye devam etmesine ve model sunumunda kesintileri önlemesine olanak sağlayabilir.

Gelişen GraphDef sürümleri

Bu bölüm değişiklikler farklı tipte yapmak için bu sürüm mekanizmasını nasıl kullanılacağı açıklanır GraphDef formatında.

İşlem ekle

Aynı anda hem tüketiciler hem üreticilere yeni bir operasyon ekleyin ve herhangi değişmez GraphDef sürümleri. Bu tür bir değişiklik otomatik olarak geriye dönük olarak uyumludur ve mevcut üretici komut dosyaları aniden yeni işlevi kullanmayacağından ileriye dönük uyumluluk planını etkilemez.

Bir operasyon ekleyin ve kullanmak için mevcut Python sarmalayıcılarını değiştirin

  1. Yeni tüketici işlevsellikler ve artırmak GraphDef versiyonu.
  2. Sarmalayıcıların yeni işlevi yalnızca daha önce çalışmayan durumlarda kullanmasını sağlamak mümkünse, sarmalayıcılar şimdi güncellenebilir.
  3. Yeni işlevi kullanmak için Python sarmalayıcılarını değiştirin. Değil artım Do min_consumer kırmak olmamalıdır bu op kullanmayan modellerin beri.

Bir operasyonun işlevselliğini kaldırın veya kısıtlayın

  1. Tüm üretici komut dosyalarını (TensorFlow'un kendisini değil) yasaklanmış işlemi veya işlevselliği kullanmamak için düzeltin.
  2. Artım GraphDef sürümü ve yeni tüketici işlevi uygulamak olduğunu yasakları GraphDefs için kaldırılan op veya işlevsellik yeni sürümüne ve yukarıda. Mümkünse, TensorFlow durağı üreten yapmak GraphDefs yasaklı işlevselliği ile. Bunu yapmak için, eklemek REGISTER_OP(...).Deprecated(deprecated_at_version, message) .
  3. Geriye dönük uyumluluk amacıyla büyük bir sürüm bekleyin.
  4. Artış min_producer (2) den GraphDef sürümüne ve tamamen işlevselliği çıkarın.

Bir operasyonun işlevselliğini değiştirme

  1. Adlı yeni benzer op ekle SomethingV2 veya benzer ve ekleyerek ve kullanmak için varolan Python sarmalayıcılarını geçiş sürecine geçmesi. İleriye dönük uyumluluk kullanacağım önerilen kontroller sağlamak için compat.py Python sarmalayıcılarını değiştirirken.
  2. Eski işlemi kaldırın (Geriye dönük uyumluluk nedeniyle yalnızca büyük bir sürüm değişikliği ile gerçekleşebilir).
  3. Artış min_consumer , eski op tüketicilere ekarte için bir takma ad olarak eski op geri eklemek için SomethingV2 ve kullanmak için varolan Python sarmalayıcılarını geçmek için sürecinden geçmesi.
  4. Kaldırmak için sürecinden geçmesi SomethingV2 .

Tek bir güvenli olmayan tüketici sürümünü yasakla

  1. Bump GraphDef sürümü ve kötü versiyonunu eklemek bad_consumers tüm yeni GraphDefs için. Mümkünse, eklediğiniz bad_consumers sadece belli op veya benzer ihtiva GraphDefs için.
  2. Mevcut tüketiciler kötü sürüme sahipse, onları mümkün olan en kısa sürede uzaklaştırın.