谷歌推出新版本TensorFlow 2.2.0,不再支持Python 2
谷歌宣布推出了TensorFlow 2.2.0,該新版本終止了對 Python 2 的支持?,F(xiàn)在,新的 TensorFlow Docker 鏡像版本僅提供 Python 3。
主要特性和改進(jìn)
· 將字符串張量的標(biāo)量類型從 std::string 替換為 tensorflow::tstring,ABI更穩(wěn)定了。
· TF 2 的新 Profiler,用于 CPU/GPU/TPU。它提供設(shè)備和主機(jī)性能分析,包括輸入管道和 TF Ops。
· 推薦使用 pybind11 將 C++ 函數(shù)導(dǎo)出到 Python,盡量不要使用 SWIG,這是棄用 Swig進(jìn)程的又一步努力。
· tf.distribute:
通過使用新添加的 tf.keras.layers.experimental.SyncBatchNormalization 層,添加了對全局同步 BatchNormalization 的支持。該層將在參與同步訓(xùn)練的所有副本之間同步 BatchNormalization 統(tǒng)計信息。
使用 tf.distribute.experimental.MultiWorkerMirroredStrategy 提高 GPU 多工分布式培訓(xùn)的性能
將 NVIDIA NCCL 更新到 2.5.7-1,以獲得更好的性能和性能調(diào)整。
支持在 float16 中減少梯度。
所有實驗的支持都減少了梯度壓縮,以允許使用反向路徑計算進(jìn)行重疊梯度聚合。
棄用 experimental_run_v2 方法。
添加對 DistributedIterators 的 CompositeTensor 支持。這應(yīng)該有助于防止不必要的功能跟蹤和內(nèi)存泄漏。
· tf.keras:
Model.fit 的主要改進(jìn):
可以通過覆蓋 Model.train_step 將自定義訓(xùn)練邏輯與 Model.fit 結(jié)合使用。
輕松編寫最新的培訓(xùn)循環(huán),而不必?fù)?dān)心 Model.fit 為你處理的所有功能(分發(fā)策略,回調(diào),數(shù)據(jù)格式,循環(huán)邏輯等)
SavedModel 現(xiàn)在使用其自己的 Model._saved_model_inputs_spec attr 而不是依賴于不再為子類 Model 設(shè)置的 Model.inputs 和 Model.input_names。
生成器支持動態(tài)形狀。
現(xiàn)在,SavedModel 格式支持所有 Keras 內(nèi)置層(包括指標(biāo),預(yù)處理層和有狀態(tài) RNN 層)。
更新 Keras 批處理規(guī)范化層,以使用 fused_batch_norm 中的運行平均值和平均值計算。
· tf.lite:
默認(rèn)情況下啟用 TFLite 實驗性新轉(zhuǎn)換器。
· XLA
XLA 現(xiàn)在可以在 Windows 上構(gòu)建并運行。所有預(yù)構(gòu)建的軟件包都隨附有 XLA。
可以在 CPU 和 GPU 上使用“編譯或拋出異?!闭Z義為 tf.function 啟用 XLA。
重大變化
tf.keras:
在tf.keras.applications中,“頂層”的名稱已標(biāo)準(zhǔn)化為“預(yù)測”。僅當(dāng)您的代碼依賴于圖層的確切名稱時,這才是問題。
Huber損失函數(shù)已更新為與其他Keras損失一致?,F(xiàn)在,在應(yīng)用歸約函數(shù)之前,它會計算每個樣本損失的最后一個軸的平均值。
AutoGraph不再轉(zhuǎn)換傳遞給tf.py_function,tf.py_func和tf.numpy_function的函數(shù)。
在此版本中棄用XLA_CPU和XLA_GPU設(shè)備。
將使用Bazel的cc_experimental_shared_library的最低bazel版本增加以將TF構(gòu)建為2.0.0。
功能和子類模型的Keras編譯/擬合行為已經(jīng)統(tǒng)一。現(xiàn)在,只有在對功能模型的實際數(shù)據(jù)進(jìn)行訓(xùn)練/評估模型之后,才可以使用模型屬性(例如度量,metrics_names)。指標(biāo)現(xiàn)在將包括模型損失和輸出損失。loss_functions屬性已從模型中刪除。這是一個無證財產(chǎn),偶然被公開,現(xiàn)在已被刪除。
新版本包含大量 bug 修復(fù)與其他更改:
tf.data:
從實驗性優(yōu)化選項中刪除了autotune_algorithm。
TF核心:
tf.constant始終創(chuàng)建CPU張量,而與當(dāng)前設(shè)備上下文無關(guān)。
渴望的TensorHandles維護(hù)一個鏡像列表,用于復(fù)制到本地或遠(yuǎn)程設(shè)備的任何副本。這樣可以避免由于op執(zhí)行而造成的任何冗余副本。
對于tf.Tensor和tf.Variable,.experimental_ref()不再是實驗性的,僅可作為.ref()使用。
pfor / vectorized_map:增加了對56個以上操作進(jìn)行矢量化的支持?,F(xiàn)在也支持向量化tf.cond。
設(shè)置盡可能多的局部形狀,以使我們可以在聚集op的漸變impl中進(jìn)行靜態(tài)推斷。
如果cond和body函數(shù)為無狀態(tài),則tf.while_loop的梯度發(fā)出Stateless。這允許多個梯度,而運維在分配策略下并行運行。
通過自動生成未使用且因此未緩存用于梯度函數(shù)的運算輸入/輸出列表,以更快的速度加快GradientTape。
在while_v2中支持back_prop = False,但將其標(biāo)記為已棄用。
嘗試在依賴于數(shù)據(jù)的控制流中使用“無”時,改進(jìn)錯誤消息。
添加RaggedTensor.numpy()。
更新RaggedTensor .__ getitem__以保留統(tǒng)一尺寸并允許索引為統(tǒng)一尺寸。
更新tf.expand_dims以始終將新維度插入為不粗糙的維度。
當(dāng)id參差不齊時,更新tf.embedding_lookup以使用partition_strategy和max_norm。
在tf.gather中允許batch_dims == rank(索引)。
在tf.print中添加對bfloat16的支持。
tf.distribute:
通過MultiWorkerMirroredStrategy支持具有可變長度輸入功能的embedding_column。
tf.keras:
在tf.keras.optimizer.Optimizer.apply_gradients中添加了experimental_aggregate_gradients參數(shù)。這允許自定義梯度聚合并在自定義訓(xùn)練循環(huán)中處理聚合的梯度。
允許pathlib.Path路徑用于通過Keras API加載模型。
tf.function / AutoGraph:
現(xiàn)在,可以在ReplicaContext.merge_call,Strategy.extended.update和Strategy.extended.update_non_slot中使用AutoGraph。
在功能中啟用了對形狀不變式的實驗支持。有關(guān)其他信息,請參閱tf.autograph.experimental.set_loop_options的API文檔。
現(xiàn)在,AutoGraph錯誤消息會排除與AutoGraph內(nèi)部的API對應(yīng)的幀。
改善tf.function輸入?yún)?shù)的形狀推斷,以在TensorFlow 2.x中解鎖更多Grappler優(yōu)化。
通過允許并行進(jìn)行資源讀取并僅在寫入時進(jìn)行同步,來改進(jìn)資源的自動控制依賴性管理。
修正tf.function中對experimental_run_v2的多個狀態(tài)調(diào)用的執(zhí)行順序。
現(xiàn)在,您可以在tf.function中使用for循環(huán)遍歷RaggedTensors。
tf.lite:
將tf.lite C推理API從實驗版本遷移到lite / c。
添加選項以在Android 10上禁止NNAPI CPU /部分加速
TFLite Android AAR現(xiàn)在包括C標(biāo)頭,并且需要API才能使用本機(jī)代碼中的TFLite。
重構(gòu)委托和委托內(nèi)核源,以允許在linter中使用。
如果指定了設(shè)備名稱或禁用了NNAPI CPU回退,則將委派的操作限制為實際支持的操作。
TFLite現(xiàn)在通過降低到tf.div op支持tf.math.reciprocal1 op。
TFLite的解壓縮操作現(xiàn)在支持布爾張量輸入。
微控制器和嵌入式代碼從實驗版移到了TensorFlow Lite文件夾中
檢查較大的TFLite張量。
使用C ++ 17修復(fù)GPU委托崩潰。
為TFLite strided_slice添加5D支持。
修復(fù)了DEPTH_TO_SPACE委托給NNAPI的錯誤,該錯誤導(dǎo)致op未被加速。
使用NNAPI委托在具有LSTM節(jié)點的模型上運行時修復(fù)分段錯誤
修復(fù)最大/最小運算的操作數(shù)為標(biāo)量時的NNAPI委托失敗。
當(dāng)用于減少操作的Axis輸入為標(biāo)量時,修復(fù)NNAPI委托失敗。
公開選項以限制將委派給NNAPI的分區(qū)的數(shù)量。
如果指定了目標(biāo)加速器,請使用其功能級別來確定要委派的操作,而不是SDK版本。
tf.random:
各種隨機(jī)數(shù)生成改進(jìn):
為默認(rèn)的random_uniform添加快速路徑
random_seed文檔改進(jìn)。
RandomBinomial廣播樣本形狀并將其追加到左側(cè)而不是右側(cè)。
添加了tf.random.stateless_binomial,tf.random.stateless_gamma,tf.random.stateless_poisson
tf.random.stateless_uniform現(xiàn)在支持int類型的無限制采樣。
數(shù)學(xué)和線性代數(shù):
添加tf.linalg.LinearOperatorTridiag。
添加LinearOperatorBlockLowerTriangular
將廣播支持添加到tf.linalg.triangular_solve#
添加tf.math.sobol_sample op。
添加tf.math.xlog1py。
添加tf.math.special。{dawsn,expi,fresnel_cos,fresnel_sin,spence}。
將修改的離散余弦變換(MDCT)及其反函數(shù)添加到tf.signal。
TPU增強(qiáng)功能:
重構(gòu)TpuClusterResolver以將共享邏輯移動到單獨的pip包中。
支持從Cloud TPU客戶端配置TPU軟件版本。
允許TPU嵌入權(quán)重衰減因子乘以學(xué)習(xí)率。
XLA支持:
將獨立的XLA AOT運行時目標(biāo)+相關(guān)的.cc源添加到pip包中。
將內(nèi)存對齊檢查添加到32位ARM上的MemoryAllocation :: MemoryAllocation()。這樣可以確保確定性的提前退出,而不是以后很難調(diào)試總線錯誤。
saved_model_cli aot_compile_cpu允許您將保存的模型編譯為XLA頭文件和目標(biāo)文件,并將其包括在C ++程序中。
為XLA啟用Igamma,Igammac。
確定性O(shè)p功能:
當(dāng)環(huán)境變量TF_DETERMINISTIC_OPS設(shè)置為“ true”或“ 1”時,XLA減少發(fā)射器是確定性的。這擴(kuò)展了確定性tf.nn.bias_add反向支持功能(因此也擴(kuò)展了Keras層中的偏置加法的確定性反向支持),使其在啟用XLA JIT兼容時也包括在內(nèi)。
解決了在CUDA GPU上運行時以及環(huán)境變量TF_DETERMINSTIC_OPS或環(huán)境變量TF_CUDNN_DETERMINISTIC設(shè)置為“ true”或“ 1”時的問題,其中某些層配置導(dǎo)致出現(xiàn)異常,并顯示消息“沒有算法起作用!”。
跟蹤和調(diào)試:
將源名稱,目標(biāo)名稱添加到_send跟蹤記錄中,以便于調(diào)試。
將traceme事件添加到fastpathexecute。
其他:
解決了多標(biāo)簽AUC的AUC.reset_states問題#35852
修復(fù)TF升級腳本,以在出現(xiàn)解析錯誤并且輸出模式就位時不刪除文件。
將tensorflow / core:framework / * _ pyclif規(guī)則移動到tensorflow / core / framework:* _ pyclif。