距離Tensorflow的1.2.1版本發布才過去一個月,但新發布的1.3版本已經包含了諸多更新。開發者可以在Tensorflow Github頁找到完整的發布報告。本文則會概述開發者在升級到1.3版本之前和之后應知曉的最重要變化。
從cuDNN 5.1到cuDNN 6
開發者要從1.2.1升級到1.3,還需要升級系統中的cuDNN版本。1.3的編譯版本是用NVIDIA的cuDNN 6編譯的,而1.2.1用的是cuDNN 5.1。不想升級的開發者還是可以從源代碼創建自己的編譯版本。cuDNN新版顯著提升了softmax層的性能。cuDNN 6新增的一個有趣的功能是膨脹卷積(dilated convolution),Tensorflow已經支持此特性。需要注意的是,從1.1.0版本開始,Tensorflow不再支持Mac上的GPU。雖然開發者還是能得到補丁,但不能保證它能正常運行。
tf.contrib.data.Dataset類
tf.contrib.data.Dataset類獲得了一些重要更新。開發者可以使用這個類為自己在Tensors中的數據創建統一的輸入流水線,輸入來源可以是內存、文件或磁盤,支持多種數據格式。它還能用來對使用Dataset.map()的各個獨立元素應用函數,或者對所有使用Dataset.batch()的元素應用函數。這個類中缺少嵌套結構的函數現在把列表隱式地轉換成tf.Tensor對象。不想用它的用戶可以使用元組來代替。Dataset類中還提供了幾個新函數:
Dataset.list_files(file_pattern):返回一個Dataset,包含了與file_pattern模式相匹配的文件名字符串。Dataset.interleave(map_func,cycle_length):賦予程序員更大的自由度來處理函數到元素的映射。它仍會對整個dataset應用map_func,但會交叉結果,這樣有助于同時處理多個輸入文件。ConcatenateDataset:用于擴展了Dataset類的一個類。它的init函數接受兩個Dataset作為參數,通過已有的Dataset.concatenate()函數將它們連接起來。要了解更多信息,開發者應該參閱Github上的開發者指南中關于使用Dataset類的說明。
高級API函數和統計分布
雖然Keras和TFlearn用戶已有很多高級API函數可用,Tensorflow又在庫中增加了下列函數:DNNClassifier、 DNNRegressor、LinearClassifer、LinearRegressor、DNNLinearCombinedClassifier、DNNLinearCombinedRegressor。這些estimator是tf.contrib.learn包的一部分,使用方法可參閱Tensorflow文檔。
新增的一項內容是多重統計分布。使用一個類表示一個統計分布,并用定義這個分布的參數進行初始化。現有很多單變量和多變量的分布。開發者也能擴展已有的類,但是必須繼續支持Distribution基類中現有的函數。為避免無效的屬性,開發者可以讓程序拋出一個異常,或者選擇用NaN值處理。下面的例子展示了開發者如何從一個均勻分布中獲取一個帶有隨機變量的張量:
已有函數的改動
已有的函數也有一些改動。tf.gather函數是用來在張量中選取變量的,現在加入了坐標軸參數,可以更靈活地收集數據。
tf.pad函數用來在已有張量周圍插入值,現在可支持“CONSTANT”實參。使用這個實參時,padding到已有張量時會使用0來填充已有張量。之前已有的模式是“REFLECT”和“SYMMETRIC”。
留下你的反饋
雖然本文涵蓋了多數重要更新,但開發者可能也想了解其他更新和功能。筆者請開發者們就Tensorflow 1.3版本補充更多內容,包括我忘記寫上的內容、現有代碼中發現的問題,或者其它任何內容,請在文后評論中留言。還沒注冊InfoQ的訪客可以注冊賬號寫下評論,為眾多同行提供幫助。
查看英文原文:Overview of Changes in Tensorflow Version 1.3