機器之心報導
參與:杜偉、一鳴
TensorFlow2.1的更新,能夠讓棄坑的用戶回心轉意嗎?
去年 10 月,谷歌才發布了 TensorFlow 2.0 正式版。時隔三個月後,昨日官方發布了 TensorFlow 2.1,本次版本更新帶了了多項新特性、功能改進和 bug 修復。
從本次更新的日誌來看,TensorFlow 2.1 將成為最後一個支持 Python2 的版本了。同時,本次更新的重點是增加了對 TPU 的多項支持,而 tf.keras 和 tf.data 這兩個常用的 API 也得到了很多新的更新。據悉,TensorFlow 2.1 的 CUDA 版本為 10.1,cuDNN 版本為 7.6。
在對作業系統的支持上,Windows 和 Linux 系統的 TensorFlow pip 版本默認支持 GPU。也就是說,如果使用 pip install tensorflow,則版本默認為是 gpu 版本(原始的 tensorflow-gpu 版本依然存在)。當然,不管有沒有英偉達版本的 GPU,tensorflow 依然能夠運行。如果需要使用 CPU 版本,用戶的安裝命令應該為:pip install tensorflow-cpu。項目地址:https://github.com/tensorflow/tensorflow/releases對於本次更新的內容,機器之心整理如下:進一步支持 TPUTensorFlow 2.1 最大的亮點在於進一步增加對 TPU 的支持。從 tf.keras、tf.data 等 API 的功能調整和更新來看,現在使用 TPU 加載數據集、訓練和模型推理會更方便一些。tf.keras 對 TPU 的支持
增加了在 GPU 和 Cloud TPUs 上對混合精度(mix precision)的支持;tf.Keras 中的 compile、fit、evaluate、predict 等 API 都支持 Cloud TPUs 了,而且支持所有的 Keras 模型(即以 sequential、functional 和子類方式構建的模型都支持);現在可以使用 Cloud TPU 進行自動外部編譯(automatic outside compilation)了,這使得 tf.summary 和 Cloud TPUs 能夠更好地一起使用;分布式策略和 Keras 中的動態批大小控制已支持 Cloud TPUs;支持在 TPU 上使用 numpy 格式的數據進行 fit、evaluate 和 predict。tf.data 對 TPU 的支持tf.data.Dataset 現在支持自動數據分發(automatic data distribution)和分布式環境下的分片操作,包括在 TPU pods 上都可以。tf.distribute 對 TPU 的支持支持在 TPU 和 TPU pods 上定製訓練循環,通過以下 API 即可:strategy.experimental_distribute_dataset、 strategy.experimental_distribute_datasets_from_function、strategy.experimental_run_v2 和 strategy.reduce。重要 API 更新TensorFlow 2.1 進行了以下一些重要的 API 更新:tf.keras
推出了 TextVectorization 層,該層將原始字符串作為輸入,併兼顧到了文本規範化、標記化、N 元語法生成和詞彙檢索;允許 Keras .compile、.fit、.evaluate 和.predict 在 DistributionStrategy 範圍之外,前提是模型在該範圍內構建;諸多流行模型的 Keras 參考實現都可以在 TensorFlow Model Garden(https://github.com/tensorflow/models/tree/master/official)中獲得;tf.datatf.data datasets 和分布式策略都進行了改進,以獲得更好的性能。需要注意的是 dataset 會變得有些不同,重新進行了分批的數據集會有多個副本;而分布式策略也會進行調整,如下所示:
tf.data.experimental.AutoShardPolicy(OFF, AUTO, FILE, DATA) tf.data.experimental.ExternalStatePolicy(WARN, IGNORE, FAIL)
TensorRT現在 TensorRT 6.0 是默認的版本,這一版本增加了對更多 TensorFlow 算子的支持,包括 Conv3D、Conv3DBackpropInputV2、AvgPool3D、MaxPool3D、ResizeBilinear 和 ResizeNearestNeighbor。此外,TensorFlow 和 TensorRT 的 Python 交互 API 被命名為 tf.experimental.tensorrt.Converter。Bug 修復TensorFlow 2.1.0 還修復了以前版本中出現的一些 Bug,整理如下:tf.data
修復當 sloppy=True 時 tf.data.experimental.parallel_interleave 出現的並發問題;增加 tf.data.experimental.dense_to_ragged_batch();擴展 tf.data 語法解析選項,從而支持 RaggedTensors。tf.distribute修復使用 tf.distribute.Strategy 時 GRU 崩潰或輸出錯誤結果的問題。tf.keras
導出 tf.keras.backend 中的 depthwise_conv2d;在 Keras Layers 和 Models 中,刪除 trainable_weights、non_trainable_weights 和 weights 中變量的重複數據;Kerasmodel.load_weights 現將 skip_mismatch 接受為一種自變量;修復 Keras 卷積層的輸入形狀緩存的行為;Model.fit_generator、Model.evaluate_generator、Model.train_on_batch, Model.test_on_batch 和 Model.predict_on_batch 方法現遵循 run_eagerly 屬性,並且在默認情況下,使用 tf.function 能夠正確地運行。請注意,Model.fit_generator、Model.evaluate_generator 和 Model.predict_generator 是不宜用的端點。這些端點現已被歸入支持生成器和序列的 Model.fit、Model.evaluate 和 Model.predict 中。