tensorflow 版本列表_TensorFlow 版本兼容性
本文面向需要在不同版本的 TensorFlow 之間向后兼容(針對代碼或者數據)的用戶,以及想要修改 TensorFlow 并同時保持兼容性的開發者。
語義化版本控制 2.0
TensorFlow 的公開 API 遵循語義化版本控制 2.0 (semver)。每個版本的 TensorFlow 都采用 MAJOR.MINOR.PATCH 形式。例如,TensorFlow 版本 1.2.3 具有 MAJOR 版本 1、MINOR 版本 2 和 PATCH 版本 3。每個數字的更改具有以下含義:
MAJOR:可能向后不兼容的更改。與之前的主要版本兼容的代碼和數據不一定與新版本兼容。不過,在一些情況下,現有 TensorFlow 計算圖和檢查點可以遷移到新版本;請參閱計算圖和檢查點的兼容性,詳細了解數據兼容性。
MINOR:向后兼容的功能、速度提升等。與之前的次要版本兼容且僅依賴于非實驗性公開 API 的代碼和數據將繼續保持兼容。有關公開 API 的詳細信息,請參閱兼容范圍。
PATCH:向后兼容的錯誤修復。
例如,與版本 0.12.1 相比,版本 1.0.0 引入了向后不兼容的更改。不過,版本 1.1.1 向后兼容版本 1.0.0。
兼容范圍
只有 TensorFlow 的公開 API 在次要和補丁版本中可向后兼容。公開 API 包括以下各項:
tensorflow 模塊及其子模塊中所有記錄的 Python 函數和類,但以下符號除外:
private 符號:任何函數、類等,其名稱以 _ 開頭
實驗性和 tf.contrib 符號,請參閱下文了解詳細信息。
請注意,examples/ 和 tools/ 目錄中的代碼無法通過 tensorflow Python 模塊到達,因此不在兼容性保證范圍內。
如果符號可通過 tensorflow Python 模塊或其子模塊到達,但未記錄,那么它也不屬于公開 API。
兼容性 API(在 Python 中,為 tf.compat 模塊)。在主要版本中,我們可能會發布實用工具和其他端點來幫助用戶過渡到新的主要版本。這些 API 符號已棄用且不受支持(即,我們不會添加任何功能,除了修復一些漏洞外,也不會修復錯誤),但它們在我們的兼容性保證范圍內。
不兼容范圍
TensorFlow 的某些部分可能隨時以向后不兼容的方式更改。包括以下部分:
實驗性 API:為了方便開發,我們將一些明確標記為實驗性的 API 符號排除在兼容性保證范圍外。特別是,以下符號不在任何兼容性保證范圍內:
tf.contrib 模塊或其子模塊中的任何符號;
名稱包含 experimental 或 Experimental 的任何符號(模塊、函數、參數、屬性、類或常量);或
完全限定名稱包含模塊或類(其自身為實驗性)的任何符號。這類符號包括稱為 experimental 的任何協議緩沖區的字段和子消息。
其他語言:Python 和 C 以外的其他語言中的 TensorFlow API,例如:
復合運算的詳細信息:Python 中的許多 public 函數都會在計算圖中展開為多個基元運算,這些詳細信息將成為任何計算圖(以 GraphDef 形式保存到磁盤中)的一部分。對于次要版本,這些詳細信息可能會發生變化。特別是,檢查計算圖之間精確匹配度的回歸測試在次要版本中可能會中斷,即使計算圖的行為應保持不變且現有檢查點仍然有效。
浮點數值詳細信息:運算計算的特定浮點值可能會隨時變化。用戶應當僅依賴于近似準確率和數值穩定性,而不是計算的特定位數。次要版本和補丁版本中數值公式的變化應當產生相當或更高的準確率,需要說明的是,機器學習中特定公式的準確率提高可能會導致整個系統的準確率降低。
隨機數:計算的特定隨機數可能會隨時變化。用戶應當僅依賴于近似正確的分布和統計強度,而不是計算的特定位數。請參閱隨機數生成指南,了解詳細信息。
分布式 Tensorflow 中的版本偏差:不支持在一個集群中運行兩個不同版本的 TensorFlow。無法保證線路協議的向后兼容性。
錯誤:如果當前實現被明顯中斷(即,如果當前實現與文檔沖突或已知且定義明確的預期行為由于錯誤未正確實現),我們保留實施向后不兼容行為(即使不是 API)更改的權利。例如,如果優化器聲明要實現已知的優化算法,但由于錯誤而不匹配該算法,我們將修復優化器。修復可能會損壞依賴錯誤行為實現收斂的代碼。我們會在版本說明中注明這些更改。
未使用的 API:我們保留對未發現使用記錄(通過 GitHub 搜索審查 TensorFlow 使用情況)的 API 實施向后不兼容更改的權利。在執行任何此類更改之前,我們會在 announce@ 郵寄名單上公布更改意圖,提供有關如何解決任何中斷問題的說明(如適用),并等待兩個星期,讓我們的社區有機會分享反饋。
錯誤行為:我們會將錯誤替換為非錯誤行為。例如,我們會更改函數以計算結果,而不是引發錯誤,即使該錯誤已有記錄。我們還保留更改錯誤消息文本的權利。此外,錯誤類型可能會變化,除非特定錯誤條件的異常類型已在文檔中指定。
SavedModel(計算圖和檢查點)的兼容性
SavedModel 是 TensorFlow 程序中使用的首選序列化格式。SavedModel 包括兩部分:編碼為 GraphDefs 的一個或多個計算圖以及一個檢查點。計算圖說明了要運行的運算的數據流,檢查點包含計算圖中變量的已保存張量值。
許多 TensorFlow 用戶創建 SavedModel,并使用新版本的 TensorFlow 加載和執行這些 SavedModel。按照 semver,使用一個版本的 TensorFlow 編寫的 SavedModel 可以使用主要版本相同的新版本 TensorFlow 進行加載和評估。
我們還為受支持的 SavedModel 提供其他保證。我們將 TensorFlow 主要版本 N 中使用僅非棄用、非實驗性、非兼容性 API 創建的 SavedModel 稱為版本 N 中受支持的 SavedModel。TensorFlow 主要版本 N 中支持的任何 SavedModel 都可以使用 TensorFlow 主要版本 N+1 加載和執行。不過,構建或修改此類模型所需的功能可能不再提供,因此該保證僅適用于未修改的 SavedModel。
我們會盡可能長期保留向后兼容性,使序列化文件在很長一段時間內可用。
GraphDef 兼容性
計算圖通過 GraphDef 協議緩沖區進行序列化。為了方便對計算圖進行向后不兼容更改,每個 GraphDef 都具有與 TensorFlow 版本獨立的版本號。例如,GraphDef 版本 17 已棄用 inv 運算而改用 reciprocal。語義為:
每個版本的 TensorFlow 都支持 GraphDef 版本的間隔。此間隔將在補丁版本之間保持一致,且僅會在次要版本之間增大。僅針對 TensorFlow 的主要版本(并且僅符合 SavedModel 保證的版本支持)停止支持 GraphDef 版本。
新創建的計算圖會被分配最新的 GraphDef 版本號。
如果給定版本的 TensorFlow 支持計算圖的 GraphDef 版本,它在加載和評估時的行為將與用于生成它的 TensorFlow 版本的行為一致(除了上面提到的浮點數值詳細信息和隨機數),不受 TensorFlow 主要版本的影響。特別是,與一個版本的 TensorFlow(例如 SavedModel)中的檢查點文件兼容的 GraphDef 將保持與后續版本中的該檢查點兼容,前提是該 GraphDef 受支持。
請注意,這僅適用于 GraphDef(和 SavedModel)中的序列化計算圖:讀取檢查點的 Code 可能無法讀取運行不同版本 TensorFlow 的相同代碼生成的檢查點。
如果 GraphDef 上限在(次要)版本中增加到 X,下限增加到 X 至少需要 6 個月。例如(我們在此處使用假想的版本號):
TensorFlow 1.2 可能支持 GraphDef 版本 4 至 7。
TensorFlow 1.3 可以添加 GraphDef 版本 8 且支持版本 4 至 8。
至少 6 個月后,TensorFlow 2.0.0 可以停止支持版本 4 至 7,僅支持版本 8。
請注意,因為 TensorFlow 主要版本的發布周期通常間隔 6 個月以上,上述詳細說明的受支持 SavedModel 的保證將比 6 個月的 GraphDef 保證更穩定。
最后,在停止支持 GraphDef 版本時,我們會嘗試提供工具,用于將計算圖自動轉換為較新的受支持 GraphDef 版本。
擴展 TensorFlow 時的計算圖和檢查點兼容性
本部分僅與對 GraphDef 格式進行不兼容更改相關,例如,添加運算、移除運算或更改現有運算的功能。上一部分應當能夠滿足大多數用戶的需求。
向后和部分向前兼容性
我們的版本管理方案有三個要求:
向后兼容性,支持加載使用舊版本的 TensorFlow 創建的計算圖和檢查點。
向前兼容性,支持計算圖或檢查點的生產者在使用者之前升級到新版本 TensorFlow 的情況。
支持以不兼容的方式演進 TensorFlow,例如,移除運算、添加特性和移除特性。
請注意,GraphDef 版本機制與 TensorFlow 版本獨立,GraphDef 格式的向后不兼容更改仍受語義化版本控制限制。這意味著,只可以在 TensorFlow 的 MAJOR 版本之間(例如 1.7 至 2.0)移除或更改功能。而且,補丁版本之間(例如,1.x.1 至 1.x.2)會強制向前兼容。
為了實現向后和向前兼容性,并了解何時在格式中強制執行更改,計算圖和檢查點包含表明它們生成時間的元數據。以下幾部分詳細介紹了 TensorFlow 實現和演進 GraphDef 版本的指南。
獨立的數據版本方案
計算圖和檢查點具有不同的數據版本。兩種數據格式以不同的速度互相演進以及從 TensorFlow 演進。兩種版本控制系統在 core/public/version.h 中定義。每次添加新版本時,都會向標題中添加說明,詳細說明更改內容和日期。
數據生產者和使用者
我們將數據版本信息分為以下種類:
生產者:生成數據的二進制文件。生產者具有版本 (producer) 及其兼容的最小使用者版本 (min_consumer)。
使用者:使用數據的二進制文件。使用者具有版本 (consumer) 及其兼容的最小生產者版本 (min_producer)。
每一項版本化數據都有一個 VersionDef versions 字段,該字段記錄了生成數據的 producer、兼容的 min_consumer 和禁止的 bad_consumers 版本列表。
默認情況下,當生產者生成一些數據時,數據將繼承該生產者的 producer 和 min_consumer 版本。如果已知特定使用者版本包含錯誤并且必須加以避免,則可以設置 bad_consumers。如果以下條件均成立,使用者可以接受一項數據:
consumer >= 數據的 min_consumer
數據的 producer >= 使用者的 min_producer
consumer 不在數據的 bad_consumers 范圍內
由于生產者和使用者來自同一個 TensorFlow 代碼庫,core/public/version.h 包含的主數據版本將被視為 producer 或 consumer,具體取決于上下文以及 min_consumer 和 min_producer(分別為生產者和使用者所需)。具體而言,
對于 GraphDef 版本,我們有 TF_GRAPH_DEF_VERSION、TF_GRAPH_DEF_VERSION_MIN_CONSUMER 和 TF_GRAPH_DEF_VERSION_MIN_PRODUCER。
對于檢查點版本,我們有 TF_CHECKPOINT_VERSION、TF_CHECKPOINT_VERSION_MIN_CONSUMER 和 TF_CHECKPOINT_VERSION_MIN_PRODUCER。
向現有運算添加一個包含默認值的新特性
按照下面的指導操作可為您提供向前兼容性,前提是運算集未發生變化:
如果需要向前兼容性,請將 strip_default_attrs 設置為 True,同時使用 SavedModelBuilder 類的 tf.saved_model.SavedModelBuilder.add_meta_graph_and_variables 和 tf.saved_model.SavedModelBuilder.add_meta_graph 方法或者 tf.estimator.Estimator.export_saved_model導出模型
這會在生成/導出模型時排除使用默認值的特性。這樣有助于確保在使用默認值時,導出的 tf.MetaGraphDef 不包含新運算特性。
進行此控制可以讓過期的使用者(例如,滯后于訓練二進制文件提供二進制文件) 繼續加載模型并防止模型提供出現中斷。
演進 GraphDef 版本
本部分將介紹如何使用此版本控制機制對 GraphDef 格式進行不同類型的更改。
添加運算
同時向使用者和生產者添加新運算,并且不更改任何 GraphDef 版本。這種類型的更改會自動向后兼容,并且不會影響向前兼容性計劃,因為現有生產者腳本不會突然使用新功能。
添加運算并將現有的 Python 包裝器切換為使用該運算
實現新使用者功能并增大 GraphDef 版本。
如果可以使包裝器僅在之前不奏效的情況中使用新功能,現在可以更新包裝器。
將 Python 包裝器更改為使用新功能。請不要增大 min_consumer,因為不使用此運算的模型不應中斷。
移除或限制運算的功能
修復所有生產者腳本(而非 TensorFlow 自身),使之不使用禁止的運算或功能。
增大 GraphDef 版本,并為新版本及更高版本的 GraphDef 實現新使用者功能,以禁止移除的運算或功能。如果可以,使 TensorFlow 停止使用禁止的功能生成 GraphDefs。為此,請添加 REGISTER_OP(...).Deprecated(deprecated_at_version, message)。
等待主要版本以實現向后兼容。
從 (2) 起增大 GraphDef 版本的 min_producer,并完全移除該功能。
更改運算的功能
添加名為 SomethingV2 或類似名稱的類似新運算,然后添加新運算并將現有 Python 包裝器切換為使用該運算。為確保向前兼容性,更改 Python 包裝器時請使用 compat.py 中建議的檢查。
移除舊運算(由于向后兼容性,只能隨主要版本更改執行此操作)。
增大 min_consumer 以排除使用舊運算的使用者,作為 SomethingV2 的別名重新添加舊運算,然后將現有的 Python 包裝器切換為使用該運算。
移除 SomethingV2。
禁止單個不安全的使用者版本
為所有新的 GraphDef 增大 GraphDef 版本并將差版本添加到 bad_consumers 中。如果可以,僅為包含特定運算或類似運算的 GraphDef 將差版本添加到 bad_consumers 中。
如果現有使用者具有差版本,請盡快將這些使用者移除。
總結
以上是生活随笔為你收集整理的tensorflow 版本列表_TensorFlow 版本兼容性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA 下载安装教程
- 下一篇: 智能寻迹小车的代码