近日,TensorFlow 2.4.0 候選版本最新發布,有哪些具體內容改進呢?趕緊一睹為快!

主要功能改進
tf.distribution通過tf.distribution.experimental.ParameterServerStrategyAPI 引入了對 Keras 模型異步訓練實驗性支持,更多細節請參見下文,MultiWorkerMirroredStrategy不再是一個實驗性 API,現在已進入穩定版本,針對命令執行失敗和其他錯誤進行了修復,請查看具體教程,了解如何使用 Keras 進行多任務并行訓練,- 對 tf.experimental.numpy 的新模塊進行了實驗性支持,此 API 不僅與 NumPy 兼容,更便于撰寫 TF 程式,可參閱詳細指南了解更多資訊,更多細節請參見下文,
- 針對 Ampere 架構的 GPU 添加了 TensorFlow-32(簡稱TF32) 的支持,這是一種基于 Nvidia Ampere 的GPU模式,默認情況下將啟用,
- Keras Functional API 的內部重構已經完成,這次重構提高了構建 Functional 模型的可靠性、穩定性和性能,
- Keras 混合精度訓練的 API tf.keras.mixed_precision 已穩定,不再為實驗性支持,這允許在訓練程序中使用 16 位浮點數格式,在 GPU 上的性能提升高達 3 倍,在 TPU 的提升也高達 60 %,
- TF Profiler 現在支持使用采樣模式 API ,對多個作業行程進行性能分析,
- TFLite Profiler Android 版本現已推出,請參閱指南以了解更多資訊,
- TensorFlow pip 安裝包現已使用 CUDA11 和 cuDNN 8.0.2 構建,
重大改進
TF Core:
- C-API 的字串張量的位元組布局已被更新,已與 TF Core/C++ 匹配,即
tensorflow::tstring/TF_TString的連續陣列, - C-API 函式
TF_StringDecode、TF_StringEncode和TF_StringEncodedSize不再被使用,現已移除;關于 C 語言中的字串訪問/修改,請參見core/platform/ctstring.h, tensorflow.python、tensorflow.core和tensorflow.compiler模塊現在被隱藏,這些模塊不再是 TensorFlow 可訪問 API 的一部分,tf.raw_ops.Max和tf.raw_ops.Min不再接受型別為tf.complex64或tf.complex128的輸入,因為這些操作對于復雜型別的行為沒有被明確定義,- 由于使用了 TensorFloat-32,某些 float32 操作在基于 Ampere 架構的 GPU 上以較低的精度運行,包括乘法和卷積,具體來說,這類運算的輸入從 23 位精度四舍五入到 10 位,這對于深度學習模型來說,在實踐中不太會造成問題,但在某些情況下,TensorFloat-32 (單精度浮點數值)也被用于 complex64 操作,
- 可以通過呼叫
config.experimental.enable_tensor_float_32_execution(False)來禁用 TensorFloat-32 , - 默認情況下,XLA:CPU 和 XLA:GPU 設備不再注冊,如果你真的需要它們,請使用
TF_XLA_FLAGS=--tf_xla_enable_xla_devices,但該標志位也將在后續版本中洗掉,
tf.keras:
compile()中的steps_per_execution引數已穩定,不再為實驗性支持,如果您傳遞的是experimental_steps_per_execution,請在你的代碼中重新命名為steps_per_execution,這個引數控制了在呼叫fit()時,每次呼叫tf.function時要運行的批次數量,在單次tf.function呼叫中運行多個批次可以極大地提高在 TPU 中或帶有大量 Python 計算的小型模型的性能,- 對 Keras Functional API 內部的重大重構可能會影響到以下代碼:
○ 在檢查 Keras 符號輸入/輸出時,使用 isinstance(x, tf.Tensor) 而不是 tf.is_tensor 的代碼,應該改用 tf.is_tensor,
○ 過分依賴符號張量所附加的確切名稱的代碼(例如,假設輸入的結尾為":0",將名稱作為唯一的識別符號,而不是使用tensor.ref() 等),
○ 使用 get_concrete_function 直接跟蹤 Keras 符號輸入的代碼,應該改成直接構建匹配的 tf.TensorSpecs 并跟蹤 TensorSpec 物件,
○ 依賴于 TensorFlow 操作轉換為操作層后所對應的確切數量和名稱的代碼,可能需要更改,
○ 使用了tf.map_fn/tf.cond/tf.while_loop/control flow 作為操作層的代碼,且碰巧能在 TF 2.4 之前的版本作業的代碼,現在將明確地不支持這些功能,在 TF 2.4 之前,將這些操作轉換為 Functional API 操作層是不可靠的,而且容易出現難以理解或無法定位的錯誤,
○ 直接對 Keras 符號值進行斷言操作的代碼,如 tf.rank 這樣可根據輸入是靜態值或符號值而回傳對應的型別的操作,現在這些操作將統一回傳符號值,
○ 能夠直接泄露張量到計算圖以外的代碼,在這個版本中將更易于導致泄露,
○ 嘗試直接計算 Keras 符號輸入/輸出的梯度的代碼,現在可以使用 GradientTape ,來代替傳遞給已構建模型的實際張量,
○ 需要通過轉換后的操作層進行非常復雜的形狀操作才能作業的代碼,Keras 符號形狀推理被證明是不夠的,
○ 試圖手動逐層遍歷 tf.keras.Model 的代碼,它假設層中只有一個位置引數,單這個假設在 TF 2.4 之前也不成立,新版本中更容易引起問題,
○ 在構建模型之前需要手動輸入 keras.backend.get_graph() 的代碼,現在已經不需要這么做了,
○ 在呼叫 Functional API Keras 模型一開始便強制進行輸入形狀假釋的代碼,這可能對一些用戶造成影響,如在 Functional 模型中創建 Input 物件時使用的形狀與傳遞給該模型的資料的形狀不匹配時,您可以通過使用正確形狀的資料呼叫模型,或者通過放寬Input 形狀假設來解決不匹配的問題(您可以將 shape 屬性設為 None ,將此作為軸(axis)以表示這是動態的),您也可以通過設定 model.input_spec = None 來完全禁止輸入檢查,
tf.data:
tf.data.experimental.service.DispatchServer現在采用配置元組,而不是單個引數,用法更新為tf.data.experimental.service.DispatchServer(dispatcher_config),tf.data.experimental.service.WorkerServer現在采用配置元組,而不是單個引數,用法更新為tf.data.experimental.service.WorkerServer(worker_config),
tf.distribute:
- 移除
tf.distribution.Strategy.experimental_make_numpy_dataset,請使用tf.data.Dataset.from_tensor_slices來代替, - 將
tf.distribut.StrategyExtended.reduce_to、tf.distribut.StrategyExtended.batch_reduce_to、tf.distribut.ReplicaContext.all_reduce中的experimental_hints重命名為options, - 將
tf.distribution.experimental.CollectiveHints重命名為tf.distribution.experimental.CommunicationOptions, - 將
tf.distribution.experimental.CollectiveCommunication重命名為tf.distribution.experimental.CommunicationImplementation, - 將
tf.distribut.Strategy.experimental_distribute_datasets_from_function重命名為distribute_datasets_from_function,因為它不僅支持實驗環境, - 洗掉了
tf.distribut.Strategy.experimental_run_v2方法,該方法在 TF 2.2 中已被廢棄,
tf.lite:
- 引入了
tf.quantization.quantize_and_dequantize_v2,它更新了超過范圍的量化的梯度定義,要模擬tf.quantization.quantize_and_dequantize(...)的 V1 行為,使用tf.grad_pass_through(tf.quantization.quantize_and_dequantize_v2)(...),
了解更多,請點擊鏈接訪問 GitHub,
如果你對本文中提到的一些資訊存在疑問,歡迎移步“問答”版塊發帖提問,你的問題有機會得到 CSDN 百大熱門技術博主、資深社區作者或者 TensorFlow 資深開發者的解答哦!同時,我們也歡迎你積極地在這個版塊里,回答其他小伙伴提出的問題,成為 CSDN 社區貢獻者,邁出出道第一步!馬上開始討論吧!
想了解更多產品發布和更新資訊?掃碼關注TensorFlow官方微信公眾號(TensorFlow_official),產品更新、課程教學、技術實踐、應用實體等精彩內容一網打盡!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234212.html
標籤:其他
