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