當前位置:
首頁 > 科技 > TensorFlow和PyTorch相繼發布最新版,有何變化

TensorFlow和PyTorch相繼發布最新版,有何變化

GIF/1.7M

原文來源:GitHub

「機器人圈」編譯:嗯~阿童木呀、多啦A亮

Tensorflow

主要特徵和改進

?在Tensorflow庫中添加封裝評估量。所添加的評估量列表如下:

1.深度神經網路分類器(DNN Classifier)

2.深度神經網路回歸量(DNN Regressor)

3.線性分類器(Linear Classifier)

4.線性回歸量(Linea rRegressor)

5.深度神經網路線性組合分類器(DNN Linear Combined Classifier)

6.深度神經網路線性組合回歸量(DNN Linear Combined Regressor)

?我們所有預構建的二進位文件都是用cuDNN 6構建的。

?import tensorflow現在運行要快得多。

?將文件緩存添加到GCS文件系統中,其中文件內容具有可配置的最大失效期(configurable max staleness)。這允許跨關閉/開放邊界緩存文件內容。

?將軸參數(axis parameter)添加到tf.gather中。

?向tf.pad中添加一個constant_values關鍵字參數。

?添加Dataset.interleave轉換。

?添加ConcatenateDataset以連接兩個數據集。

?在TensorFlow中為Poets訓練腳本添加Mobilenet 的支持。

?將塊緩存添加到具有可配置塊大小和計數的GCS文件系統中。

?添加SinhArcSinh Bijector。

?添加Dataset.list_files API。

?為雲TPU引進新的操作和Python綁定。

?添加與tensorflow-android相對稱的TensorFlow-iOS CocoaPod。

?引入集群解析器(Cluster Resolver)的基本實現。

?統一TensorShape和PartialTensorShape的內存表示。因此,張量現在最多有254個維度,而不是255個。

?更改對LIBXSMM的引用版本,使用1.8.1版本。

?TensorFlow調試器(tfdbg):

1.使用-s標誌顯示數字張量值的概要,用命令print_tensor或pt。

2.使用curses UI中的print_feed或pf命令和可點擊鏈接顯示Feed值。

3.op級別和Python源代碼行級別的運行分析器(Runtime profiler)使用run -p命令。

?統計分布庫tf.distributions的初始版本。

?將單調注意包裝器(Monotonic Attention wrappers)添加到tf.contrib.seq2seq。

API的突破性更改

?當tf.RewriterConfig在1.2版本的候選版本中可用(它從來沒有在實際版本中應用)後將其從Python API中刪除,圖重寫(Graph rewriting)仍然可用,只是不像tf.RewriterConfig那樣。而是添加顯式導入。

contrib API的更改

?在contrib中添加時間序列模型。有關詳細信息,請參閱contrib / timeseries / README.md。

?在tensorflow / contrib / lite / schema.fbs中添加FULLY_CONNECTED操作。

錯誤修正以及其他更改

?在python中使用int64 Tensor index進行切片時,修復strides和begin 類型失配問題。

?改進卷積padding文件。

?添加標籤常量,gpu,以顯示基於GPU支持的圖形。

?saved_model.utils現在顯然是支持SparseTensors的。

?非最大抑制(non-max suppression)更為有效的實現。

?除了對在線L2的支持之外,還增加了對從收縮型L2到FtrlOptimizer的支持。

?固定矩計算中的負方差。

?拓展UniqueOp基準測試,以涵蓋更多的collision案例。

?提高Mac上GCS文件系統的穩定性。

?在HloCostAnalysis中添加時間評估。

?修復Estimator中的錯誤,即構造函數中的參數不是對用戶提供參數的深度複製。這個錯誤無意中使得用戶在創建Estimator之後突變參數,從而導致潛在的未定義的行為。

?在saver.restore中添加了無檢查保存路徑。

?在device_mgr中以舊名稱註冊設備,以便輕鬆轉換到集群規範傳播(cluster spec-propagated)的配置。

?將向量指數添加到分布中。

?添加一個具有bitwise_and,bitwise_or,bitwise_xor和invert函數的按位模塊(bitwise module)。

?添加固定網格的ODE集成常式。

?允許將邊界傳遞到scipy最優化介面。

?使用「預測」方法導出的模型簽名將不再使其輸入和輸出密鑰被靜默地忽略,且被重寫為「輸入」和「輸出」。如果一個模型在1.2版本之前以不同的名稱導出,並且現在使用tensorflow / serving,它將接受使用"inputs"和"outputs"的請求。從1.2版本開始,這樣的模型將接受導出時指定的密鑰。因此,使用「輸入」和「輸出」的推理請求可能會開始有所失敗。為了解決這個問題,請更新任何推理客戶端,以發送具有訓練器代碼所使用的實際輸入和輸出密鑰的請求,或者相反地,更新訓練器代碼以分別命名輸入和輸出張量為"inputs"和 "outputs"。使用「分類」和「回歸」方法的簽名不會受此更改的影響;它們將繼續像以前一樣規範其輸入和輸出鍵。

?將內存中的緩存添加到Dataset API中。

?將數據集迭代器中的默認end_of_sequence變數設置為false。

?更新iOS示例以使用CocoaPods,並移動到tensorflow / examples / ios中。

?在tf.summary操作中添加一個family =attribute,以允許控制Tensorboard中用於組織摘要的選項卡名稱。

?當配置GPU時,如果在configure腳本中存在請求,則可根據請求自動構建GPU,而不需要--config = cuda。

?修復CPU / GPU多項式中小概率的不正確採樣。

?在session上添加一個list_devices()API以列出集群中的設備。此外,此更改增加了設備列表中的主要API以支持指定session。

?允許使用過參數化的可分離卷積。

?TensorForest多重回歸錯誤修復。

?框架現在支持armv7,cocoapods.org現在可顯示正確的頁面。

?為CocoaPods創建iOS框架的腳本。

?現在,TensorFlow的Android版本已經被推到了jcenter,以便更方便地集成到應用中。有關詳細信息,請參閱

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/android/README.md。

?TensorFlow調試器(tfdbg):

1.修復了一個阻止tfdbg使用多GPU設置的錯誤。

2.修復了一個阻止tfdbg使用tf.Session.make_callable的錯誤。

資源下載:

源代碼(zip)https://github.com/tensorflow/tensorflow/archive/v1.3.0-rc2.zip。

源代碼(tar.gz)https://github.com/tensorflow/tensorflow/archive/v1.3.0-rc2.tar.gz。

Pytorch0.2.0

這裡是PyTorch的下一個主要版本,恰恰趕上了國際機器學習大會(ICML)。今天開始可以從我們的網站http://pytorch.org下載安裝。

此版本的軟體包文檔可從http://pytorch.org/docs/0.2.0/獲取

我們引入了期待已久的功能,如廣播、高級索引、高階梯度梯度,最後是分散式PyTorch。

由於引入了廣播,某些可廣播情況的代碼行為與0.1.12中的行為不同。這可能會導致你現有代碼中出現錯誤。我們在「重要破損和解決方法」部分中提供了輕鬆識別此模糊代碼的方法。

目錄:

?張量廣播(numpy樣式)

?張量和變數的高級索引

?高階梯度

?分散式PyTorch(多節點訓練等)

?神經網路層和特徵:SpatialTransformers、WeightNorm、EmbeddingBag等

?torch 和 autograd的新應用:矩陣相乘、逆矩陣等

?更容易調試,更好的錯誤信息

?Bug修復

?重要的破損和解決方法

張量廣播(numpy樣式)

簡而言之,如果PyTorch操作支持廣播,則其張量參數可以自動擴展為相同大小(不複製數據)。

PyTorch廣播語義密切跟隨numpy式廣播。如果你熟悉數字廣播,可以按照之前流程執行。

一般語義學

如果以下規則成立,則兩個張量是「可廣播的」:

?每個張量具有至少一個維度。

?當從尺寸大小開始迭代時,從尾部維度開始,尺寸大小必須相等,其中一個為1,或其中一個不存在。

例如:

如果兩個張量x、y是「可廣播」的,則所得到的張量大小計算如下:

?如果x和y的維數不相等,則將尺寸縮小到尺寸較小的張量的前端,以使其長度相等。

?然後,對於每個維度大小,生成的維度大小是沿該維度的x和y的大小的最大值。

例如:

# can line up trailing dimensions to make reading easier

>>> x=torch.FloatTensor(5,1,4,1)

>>> y=torch.FloatTensor( 3,1,1)

>>> (x+y).size()

torch.Size([5, 3, 4, 1])

# error case

>>> x=torch.FloatTensor(5,2,4,1)

>>> y=torch.FloatTensor( 3,1,1)

>>> (x+y).size()

RuntimeError: The size of tensor a (2) must match the size of tensor b (3) at non-singleton dimension 1

更多細節可以在PyTorch文檔網站上找到。此外,每個torch函數列出了其文檔中的廣播語義。

張量和變數的高級索引

PyTorch現在支持NumPy樣式的高級索引的子集。這允許用戶使用相同的[]-樣式操作在Tensor的每個維度上選擇任意索引,包括不相鄰的索引和重複的索引。這使得索引策略更靈活,而不需要調用PyTorch的索引[Select, Add, ...]函數。

我們來看一些例子:

x = torch.Tensor(5, 5, 5)

純整數組索引—在每個維度上指定任意索引

x[[1, 2], [3, 2], [1, 0]]

--> yields a 2-element Tensor (x[1][3][1], x[2][2][0])

也支持廣播、副本

x[[2, 3, 2], [0], [1]]

--> yields a 3-element Tensor (x[2][0][1], x[3][0][1], x[2][0][1])

允許任意索引器形狀

x[[[1, 0], [0, 1]], [0], [1]].shape

--> yields a 2x2 Tensor [[x[1][0][1], x[0][0][1]], [x[0][0][1], x[1][0][1]]]

可以使用冒號、省略號

x[[0, 3], :, :] x[[0, 3], ...]

--> both yield a 2x5x5 Tensor [x[0], x[3]]

也可以使用張量來索引!

y = torch.LongTensor([0, 2, 4]) x[y, :, :]

--> yields a 3x5x5 Tensor [x[0], x[2], x[4]]

如果選擇小於ndim,請注意使用逗號

x[[1, 3], ]

--> yields a 2x5x5 Tensor [x[1], x[3]]

高階梯度

現在你可以評估PyTorch中的高階微分。例如,你可以計算Hessian-Vector,懲罰你的模型的梯度梯度的範數,實施unrolled GAN和改良WGAN等。

在0.2版本中,我們已經能夠為torch.XXX函數和最流行的nn層計算更高階的梯度。其餘的將出現在下一個版本中。

這是一個簡短的例子,懲罰了Resnet-18模型的權重梯度的範數,使權重的數量變化緩慢。

我們在這裡看到兩個新概念:

?你可以對梯度進行操作,並向後調用()。

支持更高階梯度的nn層的列表有:

?AvgPool*d, BatchNorm*d, Conv*d, MaxPool1d,2d, Linear, Bilinear。

?pad, ConstantPad2d, ZeroPad2d, LPPool2d, PixelShuffle。

?ReLU6, LeakyReLU, PReLU, Tanh, Tanhshrink, Threshold, Sigmoid, HardTanh, ELU,Softsign, SeLU。

?L1Loss, NLLLoss, PoissonNLLLoss, LogSoftmax, Softmax2d。

其餘的將在下一個版本中啟用。

為了實現更高階的梯度,我們引入了一種新的autograd.Function寫入格式。(寫入函數的當前/舊樣式完全向後兼容)。你可以點擊此處鏈接閱讀更多關於新樣式的函數。

大多數人不寫自己的autograd.Function,它們是低級基元使得autograd引擎完成新操作,你可以指定正向和反向調用。

分散式PyTorch

我們介紹torch.distributed包,允許你在多台機器之間交換張量。使用此軟體包,你可以通過多台機器和更大的小批量擴展網路訓練。例如,你將能夠實現《Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour》這篇論文。

distributed軟體包遵循MPI風格的編程模型。這意味著你可以得到很多函數,如send,recv,all_reduce,它將在節點(機器)之間交換張量。

對於每個機器,首先識別彼此並分配唯一的數字(等級),我們提供簡單的初始化方法:

?共享文件系統(要求所有進程可以訪問單個文件系統)

?IP組播(要求所有進程都在同一個網路中)

?環境變數(需要你手動分配等級並知道所有進程可訪問節點的地址)

我們的包文檔中包含有關初始化和可用後端的更多詳細信息,但以下是使用多播地址進行初始化的示例:

mport torch.distributed as dist dist.init_process_group(backend="tcp",

init_method="tcp://[ff15:1e18:5d4c:4cf0:d02d:b659:53ba:b0a7]:23456",

world_size=4)

print("Hello from process {} (out of {})!".format( dist.get_rank(), dist.get_world_size()))

這將在第3台機器上列印Hello from process 2 (out of 4)。

world大小是參與工作的過程的數量。每個將被分配一個等級,它是0和world_size-1之間的數字,在此作業中是唯一的。它將用作進程標識符,並且將被代替地址使用,例如,指定張量應被發送到哪個進程。

這是一個代碼段,顯示如何執行簡單的點對點通信:

非同步p2p函數(isend,irecv)也可用。

然而,一些通信模式出現頻繁,導致已經開發出更有效的集體調用。他們通常參與整個過程組,並且比使用send / recv的單純演算法要快得多。一個例子是all_reduce:

分散式軟體包是相當低級別的,因此它允許實現更先進的演算法,並將代碼定製到特定的目的,但數據並行訓練是我們為此創建高級輔助工具的常見方法。

因此,我們引入了DistributedDataParallel,這意味著幾乎可以替代nn.DataParallel。

以下是一個代碼段,展示了將其添加到現有訓練代碼中所需的更改:

你可以在這裡看到更完整的Imagenet訓練示例

新的nn層:SpatialTransformers,WeightNorm,EmbeddingBag等

新功能

?引入forward_pre_hook來在調用forward函數之前執行用戶指定的閉包。

?方便訪問非葉梯度(non-leaf gradients):

目前,要訪問並檢查中間值的梯度,我們必須使用鉤(hooks)。這不方便進行簡單的檢查,因此,我們引入retain_grad。最好通過一個例子來解釋:

?DataParallel現在支持dicts作為輸入

新圖層

?空間變換神經網路通過F.grid_sample和F.affine_grid。

?nn.SeLU和nn.AlphaDropout被引入,論文:《自標準化神經網路》。

?nn.GLU(門控線性單元)被引入,論文:《卷積序列到序列學習》。

?現在可以使用ignore_index參數計算cross_entropy_loss和nll_loss來忽略特定的目標索引。這是實現掩碼的廉價實用方式,你可以在其中使用在計算損失時忽略的掩碼索引。

?F.normalize 實現了按維度的重歸一化。

?F.upsample和nn.Upsample將多個Upsampling層合併成一個函數。它實現了2d和3d雙線性/三線性/最近的上採樣。

?nn.EmbeddingBag:當構建詞袋模型時,執行一個Embedding 跟Sum或Mean是很常見的。對於可變長度序列,計算降維包涉及掩碼。我們提供了一個單一的nn.EmbeddingBag,它能高效和快速地計算降維包,特別是對於可變長度序列。

?通過bce_with_logits數值穩定的二進位交叉熵損失。

?通過PoissonNLLLoss進行目標泊松分布的負對數似然損失。

?cosine_similarity:返回x1和x2之間的餘弦相似度,沿著dim計算。

訓練效用

提供各種策略,可以根據適當情況使用,更多可以在文檔包中閱讀:

?ReduceLROnPlateau,LambdaLR,StepLR,MultiStepLR,ExponentialLR

ConcatDataset是一個方便的數據集元類,可以合併和連接兩個單獨的數據集。

torch 和 autograd的新應用

?所有reduce函數如sum和mean,現在默認壓縮縮小的維度。例如,torch.sum(torch.randn(10,20))返回1D Tensor。

?x.shape,類似於numpy。 一個方便的屬性,相當於x.size()。

?torch.matmul,類似於np.matmul。

?按位和,或,xor,lshift,rshift。

?autograd支持反向,gesv,cumprod,atan2。

?無偏差的var和std現在可以通過關鍵字參數選項。

?torch.scatter_add - torch.scatter,除了遇到重複索引時,這些值被求和。

?當沒有給出參數時,torch.median的行為類似於torch.sum,即它減小所有尺寸,並返回扁平化Tensor的單個中值。

?masked_copy_已重命名為masked_scatter_(在masked_copy_上已棄用)。

?torch.manual_seed現在也seed所有的CUDA設備。

?你現在可以通過關鍵字參數torch.rand(1000,generator = gen)指定隨機數生成器對象。

錯誤修復和小改進

現在,當將變數轉換為bool時,我們會發出錯誤。例如:

b = Variable(torch.zeros(1)) if b[0]: # errors now

?在CUDA中解決qr分解中的正確性錯誤。

?支持IBM PowerPC64平台。

?檢查編譯時的CuDNN版本是否在運行時是相同的版本。

?改進CUDA分叉子進程中的錯誤消息。

?在CPU上更快的轉置拷貝。

?改進InstanceNorm中的錯誤消息。

?為各種常式添加更多的參數檢查,特別是BatchNorm和Convolution常式。

?圍繞CPU後端的形狀報告更好的錯誤消息。

?支持每台機器超過8個GPU(解決CUDA p2p限制)。

?訪問不存在的屬性時,改進錯誤消息。

?變數的T()與Tensor一致。

?當退出p = 1時,防止除以零。

?修復在非當前設備上共享CUDA張量。

?當BNε

?對於MKL和OMP使用不同數量的線程時,修複線程丟失。

?改善使用CuDNN RNN時的內存使用。

?用負的padding將ZeroPad2d向後修復。

?添加虛擬tensor.data屬性,為用戶提供可解釋的錯誤消息。

?修復Python3的原位劃分。

?在0-dim數組上調用from_numpy時提高誤差。

?空的張量在多處理器間共享時不會出錯。

?修復擴展張量的baddbmm。

?讓parallel_apply接受任意輸入。

?張量和變數中的關鍵字參數現在是一致的。

?當Magma不可用時修復torch.inverse。

?為ByteTensor添加邏輯非運算符。

?在分散/收集內核中添加設備判斷提示。

重要的破損和解決方法

如你所見,我們引入了兩個不能向後兼容的重要更改:

?Numpy樣式廣播。

?還原函數如sum(1)現在默認為keepdim = False。

我們提供不同級別的Python警告,你可以啟用以警告你,如果你使用不贊成的行為,或者你的代碼的行為已更改。

摘要

這是一個代碼片段,你可以添加到腳本的頂部。

添加此代碼將生成突出顯示不兼容代碼的警告。

修復代碼不再生成警告。

一旦所有警告消失,你可以刪除代碼段。

詳情

現在,讓我們看看這三個不相容的變化與例子。

使用(現已棄用)1維視圖點分函數

PyTorch的先前版本允許某些點函數在不同形狀的張量上執行,只要每個張量中的元素數量相等即可。 然後通過將每個張量視為一維來執行點操作。 PyTorch現在支持廣播。 「一維」點行為被認為是不推薦的,並且在張量不可廣播但具有相同數量的元素的情況下會產生Python警告。

例如:

在以前沒有發生過的代碼中進行廣播

在兩張張量不相同的情況下,廣播的引入可能導致向後不兼容的變化,但是可以廣播並具有相同數量的元素。

例如:

>>> torch.add(torch.ones(4,1), torch.randn(4))

以前會產生一個尺寸為:torch.Size([4,1])的張量,但現在生產的尺寸為:torch.Size([4,4])。

例如:

>>> torch.add(torch.ones(4,1), torch.ones(4)) __main__:1: UserWarning: self and other do not have the same shape, but are broadcastable, and have the same number of elements.

請注意,此設置可以觸發廣播有效使用的警告(包括庫代碼),因此你可能希望在遷移代碼後關閉此警告。

還原函數的KeepDim = False。

>>> torch.sum(torch.ones(2,3), 1) __main__:1: UserWarning: backwards compatibility: call to "sum" uses default value for keepdim which has changed default to False. Consider passing as kwarg.

3

3

[torch.FloatTensor of size 2]

還要注意,使用keepdim = False可以使你現有的代碼與廣播「正常工作」。 例如:

資源下載:

源代碼(zip):https://github.com/pytorch/pytorch/archive/v0.2.0.zip。

源代碼(tar.gz):https://github.com/pytorch/pytorch/archive/v0.2.0.tar.gz。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器人圈 的精彩文章:

如何用CoreML和Swift在蘋果上開發「實時對象識別器」
你離識別這些AI謊言有多遠?科普綜藝來補位
LR-GAN如何生成圖像?這裡有篇Pytorch教程
實時風格遷移原來這麼酷!用PyTorch分分鐘搞定
Salesforce AI最新研究,如何情境化詞向量進行翻譯

TAG:機器人圈 |

您可能感興趣

iPhone 6s plus的三點變化,贏了iPhone X
Angular 6 LazyLoading 變化
新鮮事:vivo Xplay 7曝光/iPhone SE二代外觀無變化
《Science Advances》:科學家發現北極氣候變化迅速的證據
iPhone 9和iPhone Xs預期變化:LCD屏、單相機、更便宜
iPhone X Plus、iPhone 9模型機曝光,一探機身尺寸變化!
灰色調的層次變化 Adidas Harden Vol.2 新款一覽
蘋果新一代 MacBook Pro新變化/外媒評蘋果 Blackmagic eGPU/蘋果無人駕駛車輛數量增加
小屏黨的假想圖?iPhone SE 2對比iPhone 5s,變化不大
Android系統將發生重磅變化!谷歌最新自主研發的新一代操作系統 Fuchsia OS 曝光:流暢度完勝蘋果iOS
Robinhood的加密平台可能會發生重大變化,市場專家表示Coinbase應該擔心
外媒:iPhoneXPlus三大變化:機身與8Plus一樣大
初代iPhone和iPhoneX對比 十年間蘋果有哪些變化
jQuery之監聽input、textarea輸入框值變化
Science Robotics發布韓國「毛毛蟲」機器人,僅靠環境濕度變化就能前進!
原創新人#奶泡玩法多變化—Nespresso 奈斯派索 Creatista Plus 咖啡機 黑色
為 Apple Watch 刷上 watchOS 5 後,我發現了這些變化
iPhoneXPlus概念圖:除了丑劉海變寬還有啥變化
iPhone 11圖紙曝光 外觀和iPhone X幾乎沒有變化
InishTurkBeg私人島嶼品牌設計:醉人和不斷變化的