在線客服
在線客服
在線客服

在线免费看国产黄色网站_久久久无码精品亚洲日韩按摩不卡_在线97自拍视频在线观看_国产一级二级视频_欧美日韩亚洲中文字幕二区_亚洲天堂成人免费av_2024天天躁夜夜躁狠狠躁_精品国语自产精品视频_成人毛片视频看看_欧美日韩在线免费

廣東一哥再生資源科技有限公司

廣東再生資源回收服務(wù)熱線

19928751911

當(dāng)前位置: 首頁>>塑料回收>>正文

印度y5710塑料顆粒用途的簡單介紹

類別:塑料回收 作者:jackchao 發(fā)布時間:2021-11-01 瀏覽人次:2916

翻譯 | 林椿眄

出品 | AI 高科技大學(xué)本科營(大眾號ID:rgznai100)

這次本子的重要革新少許本能的優(yōu)化,囊括衡量外存計劃,供給 Windows 扶助,24個普通散布,變量及數(shù)據(jù)典型,零維張量,張質(zhì)變量兼并,扶助 CuDNN 7.1,加速散布式計劃等,并建設(shè)局部要害 bug等。

▌目次

重要變革

張量/變量兼并

零維張量

數(shù)據(jù)典型

本子遷徙指南

新個性

張量

高檔的索引功效

趕快傅里葉變幻

神經(jīng)搜集

衡量外存計劃

瓶頸—用來辨別代碼熱門的東西

torch中的散布

24個普通的幾率散布

增添 cdf,variance,entropy,perplexity 等本領(lǐng)

散布式計劃

便利運用的Launcher utility

NCCL2 后端

C++ 拓展

Window 扶助

革新 ONNX 本能

RNN 扶助

本能革新

Bug 建設(shè)

▌重要變革

以次咱們將為Pytorch用戶歸納少許一再運用到的最要害的中心功效。

重要變革及潛伏的沖破性變革

Tensors/Variables 兼并

零維 Tensors 的少許操縱

棄用Volatile 標(biāo)記

本能革新

增添了 dtypes、devices及numpy作風(fēng)的 tensor 創(chuàng)造因變量

扶助編寫少許不依附擺設(shè)的代碼

咱們編寫了一個本子遷徙指南,扶助你將代碼變換為新本子的 APIs和作風(fēng)。即使你想要遷徙先前本子的 PyTorch代碼,請觀賞遷徙指南。其余,本局部的實質(zhì)(囊括重要中心變革)都包括在遷徙指南開中學(xué)。

Tensor 和Variable 類兼并

新本子中,torch.autograd.Variable和torch.Tensor將同屬一類。更真實地說,torch.Tensor 不妨盯梢汗青并像舊本子的 Variable 那么運轉(zhuǎn); Variable 封裝保持不妨像往日一律處事,但歸來的東西典型是 torch.Tensor。 這表示著你不復(fù)須要代碼中的一切變量封裝器。

Tensor 的type () 變革

這邊須要提防到張量的 type()不復(fù)反應(yīng)數(shù)據(jù)典型,而是改用 isinstance()或 x.type()來表白數(shù)據(jù)典型,代碼如次:

>>> x = torch.DoubleTensor([1, 1, 1])>>> print(type(x)) # was torch.DoubleTensor<class 'torch.autograd.variable.Variable'>>>> print(x.type()) # OK: 'torch.DoubleTensor''torch.DoubleTensor'>>> print(isinstance(x, torch.DoubleTensor)) # OK: TrueTrueautograd 用來盯梢汗青記載

動作 autograd本領(lǐng)的中心標(biāo)記,requires_grad此刻是 Tensors 類的一個屬性。 讓咱們看看這個變革是怎樣展現(xiàn)在代碼中的。Autograd的運用本領(lǐng)與先前用來 Variable 的準(zhǔn)則溝通。當(dāng)操縱中大肆輸出 Tensor的require_grad = True時,它發(fā)端盯梢汗青記載。代碼如次所示,

>>> x = torch.ones(1) # create a tensor with requires_grad=False (default)>>> x.requires_gradFalse>>> y = torch.ones(1) # another tensor with requires_grad=False>>> z = x + y>>> # both inputs have requires_grad=False. so does the output>>> z.requires_gradFalse>>> # then autograd won't track this computation. let's verify!>>> z.backward()RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn>>>>>> # now create a tensor with requires_grad=True>>> w = torch.ones(1, requires_grad=True)>>> w.requires_gradTrue>>> # add to the previous result that has require_grad=False>>> total = w + z>>> # the total sum now requires grad!>>> total.requires_gradTrue>>> # autograd can compute the gradients as well>>> total.backward()>>> w.gradtensor([ 1.])>>> # and no computation is wasted to compute gradients for x, y and z, which don't require grad>>> z.grad == x.grad == y.grad == NoneTruerequires_grad 操縱

除去徑直樹立屬性除外,你還不妨運用 my_tensor.requires_grad_(requires_grad = True)在原地變動此標(biāo)記,大概如上例所示,在創(chuàng)造時將其動作參數(shù)傳播(默許為 False)來實行,代碼如次:

>>> existing_tensor.requires_grad_()>>> existing_tensor.requires_gradTrue>>> my_tensor = torch.zeros(3, 4, requires_grad=True)>>> my_tensor.requires_gradTrue對于 .data

.data 是從 Variable中獲得底層 Tensor 的重要辦法。 兼并后,挪用 y = x.data仍舊具備一致的語義。所以 y將是一個與 x共享溝通數(shù)據(jù)的 Tensor,而且 requires_grad = False,它與 x的計劃汗青無干。

但是,在某些情景下 .data 大概不安定。 對 x.data 的任何變動都不會被 autograd 盯梢,即使在反向進程中須要 x,那么計劃出的梯度將不精確。另一種更安定的本領(lǐng)是運用 x.detach(),它將歸來一個與 requires_grad = False 時共享數(shù)據(jù)的 Tensor,但即使在反向進程中須要 x,那么 autograd 將會馬上變動它。

零維張量的少許操縱

先前本子中,Tensor矢量(1維張量)的索引將歸來一個Python數(shù)字,但一個Variable矢量的索引將歸來一個巨細(xì)為(1,)的矢量。同樣地, reduce因變量生存一致的操縱,即tensor.sum()會歸來一個Python數(shù)字,然而variable.sum()會挪用一個巨細(xì)為(1,)的向量。

倒霉的是,新本子的PyTorch中引入了符合的標(biāo)量(0維張量)扶助! 不妨運用新本子中的torch.tensor因變量來創(chuàng)造標(biāo)量(這將在反面更精細(xì)地證明,此刻只需將它覺得是PyTorch中numpy.array的等效項)。此刻你不妨做如許的工作,代碼如次:

>>> torch.tensor(3.1416) # create a scalar directlytensor(3.1416)>>> torch.tensor(3.1416).size() # scalar is 0-dimensionaltorch.Size([])>>> torch.tensor([3]).size() # compare to a vector of size 1torch.Size([1])>>>>>> vector = torch.arange(2, 6) # this is a vector>>> vectortensor([ 2., 3., 4., 5.])>>> vector.size()torch.Size([4])>>> vector[3] # indexing into a vector gives a scalartensor(5.)>>> vector[3].item() # .item() gives the value as a Python number5.0>>> sum = torch.tensor([2, 3]).sum()>>> sumtensor(5)>>> sum.size()torch.Size([])累計丟失因變量

商量在 PyTorch0.4.0 本子之前普遍運用的 total_loss + = loss.data[0] 形式。Loss 是一個包括張量(1,)的Variable,然而在新頒布的0.4.0本子中,loss 是一個0維標(biāo)量。 對于標(biāo)量的索引是沒有意旨的(暫時的本子會給出一個勸告,但在0.5.0中將會報錯一個硬缺點):運用 loss.item()從標(biāo)量中獲得 Python 數(shù)字。

還犯得著提防得是,即使你在積聚損失機未能將其變換為 Python 數(shù)字,那么步調(diào)中的外存運用量大概會減少。這是由于上頭表白式的右側(cè),在先前本子中是一個Python 浮點型數(shù)字,而此刻它是一個零維的張量。 所以,總丟失將會積聚了張量及其汗青梯度,這大概會須要更多的功夫來機動求解梯度值。

棄用volatile標(biāo)記

新本子中,volatile 標(biāo)記將被棄用且不重逢有任何效率。先前的本子中,任何波及到 volatile = True 的 Variable 的計劃都不會由 autograd 躡蹤到。這仍舊被一組更精巧的左右文處置器所代替,囊括 torch.no_grad(),torch.set_grad_enabled(grad_mode)之類。代碼如次:

>>> x = torch.zeros(1, requires_grad=True)>>> with torch.no_grad():... y = x * 2>>> y.requires_gradFalse>>>>>> is_train = False>>> with torch.set_grad_enabled(is_train):... y = x * 2>>> y.requires_gradFalse>>> torch.set_grad_enabled(True) # this can also be used as a function>>> y = x * 2>>> y.requires_gradTrue>>> torch.set_grad_enabled(False)>>> y = x * 2>>> y.requires_gradFalsedtypes、devices 及數(shù)組作風(fēng)的新因變量

在先前本子的 PyTorch 中,咱們常常須要指定命據(jù)典型(比方float vs double),擺設(shè)典型(cpu vs cuda)和構(gòu)造(dense vs sparse)動作“張量典型”。比方,torch.cuda.sparse.DoubleTensor是 Tensor 類的 double 數(shù)據(jù)典型,用在 CUDA 擺設(shè)上,并具備 COO 稠密張量構(gòu)造。

在新本子中,咱們將引入 torch.dtype,torch.device 和 torch.layout 類,再不經(jīng)過 NumPy 作風(fēng)的創(chuàng)造因變量來更好地處置那些屬性。

torch.dtype

以次給出可用的 torch.dtypes(數(shù)據(jù)典型)及其相映張量典型的完備列表。

運用 torch.set_default_dtype 和 torch.get_default_dtype來操縱浮點張量的默許 dtype。

torch.device

torch.device 包括擺設(shè)典型('cpu'或'cuda')及可選的擺設(shè)序號(id)。它不妨經(jīng)過 torch.device('{device_type}')或 torch.device('{device_type}:{device_ordinal}')來初始化所選擺設(shè)。

即使擺設(shè)序號不生存,則用暫時擺設(shè)表白擺設(shè)典型; 比方,torch.device('cuda')同等于 torch.device('cuda:X'),個中 x 是 torch.cuda.current_device()的截止。

torch.layout

torch.layout 表白張量的數(shù)據(jù)構(gòu)造。新本子中,torch.strided(聚集張量)和torch.sparse_coo(帶有 COO 方法的稠密張量)均受扶助。

創(chuàng)造張量

新本子中,創(chuàng)造 Tensor 的本領(lǐng)還不妨運用 dtype,device,layout 和 requires_grad選項在歸來的 Tensor 中指定所需的屬性。代碼如次:

>>> device = torch.device("cuda:1")>>> x = torch.randn(3, 3, dtype=torch.float64, device=device)tensor([[-0.6344, 0.8562, -1.2758], [ 0.8414, 1.7962, 1.0589], [-0.1369, -1.0462, -0.4373]], dtype=torch.float64, device='cuda:1')>>> x.requires_grad # default is FalseFalse>>> x = torch.zeros(3, requires_grad=True)>>> x.requires_gradTruetorch.tensor

torch.tensor 是新增添的張量創(chuàng)造本領(lǐng)之一。它像一切典型的數(shù)據(jù)一律陳設(shè),并將包括值復(fù)制到一個新的 Tensor 中。如前所述,PyTorch 中的 torch.tensor等價于 NumPy 中的結(jié)構(gòu)因變量 numpy.array。與 torch.*tensor 本領(lǐng)各別的是,你也不妨經(jīng)過這種辦法(單個 python 數(shù)字在 torch.*tensor 本領(lǐng)中被視為巨細(xì))創(chuàng)造零維張量(也稱為標(biāo)量)。其余,即使沒有給出 dtype 參數(shù),它會按照給定的數(shù)據(jù)估計出符合的 dtype。這是從現(xiàn)罕見據(jù)(如 Python 列表)創(chuàng)造張量的引薦本領(lǐng)。代碼如次:

>>> cuda = torch.device("cuda")>>> torch.tensor([[1], [2], [3]], dtype=torch.half, device=cuda)tensor([[ 1], [ 2], [ 3]], device='cuda:0')>>> torch.tensor(1) # scalartensor(1)>>> torch.tensor([1, 2.3]).dtype # type inferecetorch.float32>>> torch.tensor([1, 2]).dtype # type inferecetorch.int64咱們還增添了更多的張量創(chuàng)造本領(lǐng)。個中囊括少許有torch.*_like或tensor.new_ *變體。

1. torch.*_like 輸出一個 tensor 而不是形勢。只有另有證明,它默許將歸來一個與輸出張量溝通屬性的張量。代碼如次:

>>> x = torch.randn(3, dtype=torch.float64)>>> torch.zeros_like(x)tensor([ 0., 0., 0.], dtype=torch.float64)>>> torch.zeros_like(x, dtype=torch.int)tensor([ 0, 0, 0], dtype=torch.int32)2. tensor.new_ * 也不妨創(chuàng)造與 tensor 具備溝通屬性的 tensor,但它須要指定一個形勢參數(shù):

>>> x = torch.randn(3, dtype=torch.float64)>>> x.new_ones(2)tensor([ 1., 1.], dtype=torch.float64)>>> x.new_ones(4, dtype=torch.int)tensor([ 1, 1, 1, 1], dtype=torch.int32)要獲得所需的形勢,在大普遍情景下你不妨運用元組(比方 torch.zeros((2,3)))或可變參數(shù)(比方 torch.zeros(2,3))來指定。

個中 *:torch.from_numpy 只接收一個 NumPy ndarray 典型動作其輸出參數(shù)。

編寫少許與擺設(shè)無干的代碼

先前本子的 PyTorch 很難編寫少許擺設(shè)不行知或不依附擺設(shè)的代碼(比方,不妨在沒有竄改的情景下,在CUDA情況下和僅CPU情況的計劃機上運轉(zhuǎn))。

在新本子PyTorch 0.4.0中,你經(jīng)過一下兩種辦法讓這一進程變得更簡單:

張量的device屬性將為一切張量供給torch.device屬性(get_device僅實用于CUDA張量)

Tensors和Modules的to本領(lǐng)可用來將東西輕快挪動到各別的擺設(shè)(而不用按照左右文消息挪用cpu()或cuda())

咱們引薦用以次的形式:

# at beginning of the scriptdevice = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")...# then whenever you get a new Tensor or Module# this won't copy if they are already on the desired deviceinput = data.to(device)model = MyModule(...).to(device)▌張量

扶助高檔的索引辦法

新本子的 PyTorch 將實足扶助高檔索引,按照 numpy 的高檔索引準(zhǔn)則。此刻你不妨運用以次示例:

a = torch.rand(10, 10, 10, 10)# the indexing elements can have other shapes than 1b = a[[[3, 2]], :, [[1, 3]]]# broadcasting also supported in the indices, as well as lists,# negative indices, slices, elipses, numbersc = a[[1, -2], 2:4, :, [1]]# can also support tensors as indicesindex = torch.tensor([2, 4])d = a[index]# and the indices can be on the GPU# or CPUe = a[index.cuda()]f = a.cuda()[index]mask = torch.rand(10) > 0.5# we can now index with a mask that has fewer# dimensions than the indexing tensorc = a[mask, :5]趕快傅里葉變幻

增添新的 FFT 本領(lǐng)#5856

增添 torch.stft(短時傅立葉變幻)和 hann / hamming / Bartlett 窗因變量。#4095

在 * FFT#6528 中扶助大肆數(shù)目的批次維度

已革新的 torch 新功效和操縱

減少了 torch.log2 和 torch.log10#6272

減少了 torch.isnan#5273

增添 torch.reshape,這與 numpy.reshape 的功效一致。它大概十分于 tensor.contiguous().view(),但在某些情景下制止了復(fù)制#5575

增添 torch.unique 的 CPU 實行,它輸入張量中的特殊元素#5503

a = torch.arange(0, 9).reshape(3, 3)# the following transposes ab = torch.einsum('ij->ji', (a,))增添 torch.det,torch.logdet 和 torch.slogdet,用來計劃平方 2D 張量的對數(shù)隊伍式。對于負(fù)的隊伍式,torch.logdet 歸來 nan,而 torch.slogdet歸來的是對數(shù)隊伍式的標(biāo)記和隊伍式一致值的對數(shù)。#3816和#5393

增添 nn.functional.gumbel_softmax,它承諾你對分割變量運用重參數(shù)化本領(lǐng)#3341

增添 torch.take 和 Tensor.put_。那些因變量十分于 numpy.take和 numpy.put,而且是普通 PyTorch 中高檔索引的功效#3263

增添 torch.randint,一致于 numpy.random.randint#6136

增添 torch.diagonal 和 torch.diagflat,一致于 numpy.diagonal和numpy.diagflat。它們動作 torch.diag 的代替品,用來處置結(jié)構(gòu)對角張量以及索取矩陣對角線等題目#5622

增添 torch.einsum,十分于 numpy.einsum。承諾你運用einsum標(biāo)記來實行關(guān)系操縱,代碼如次。#5503

增添 torch.expm1。對于少量值的x來說,它將歸來一個數(shù)值寧靜的 exp(x)-1。#4350

承諾用戶運用 torch.split 來指定所要獨立分隔的尺寸#3837

增添 torch.where(condition,tensor1,tensor2),按照前提歸來從 tensor1或 tensor第22中學(xué)采用的元素的張量。#4259,#4259

為稠密張量增添 Tensor.norm(dim)。#4882

對準(zhǔn)一切典型運用 torch.neg。#4075

為 torch.trtrs 實行梯度計劃。#3972

棄用不符合的 Tensor.resize 和 Tensor.resize_as。那些本領(lǐng)有怪僻的語義,且很難被精確運用。請運用它們的原位變體 Tensor.resize_和 Tensor.resize_as_。#4886

將 .cuda()中的 async 參數(shù)重定名為 non_blocking

新本子的 PyTorch 中,變換挪用中所需的 async 要害字參數(shù)已被棄用,而且被non_blocking所代替。這是需要的,由于 async 將變成 Python3.7中的要害字。

▌神經(jīng)搜集

一個新的 autograd 容器(用來衡量計劃外存)

新的 checkpoint 容器承諾你保存反向傳遞進程所需輸入的子集。即使缺乏輸入(為了儉樸外存),checkpoint 容器將從新計劃來自邇來查看點的中央輸入,再不縮小外存運用量(跟著計劃功夫的減少)。以次是一個例子:

# inputinput = torch.rand(1, 10)# suppose we have a very deep modellayers = [nn.Linear(10, 10) for _ in range(1000)]model = nn.Sequential(*layers)output = model(input)上頭范例中的模子運用了洪量的外存,由于它須要保持反向傳遞中每個操縱的中央值。而 checkpoint 容器不妨讓你縮小外存需要:

# create the input tensors and set the requires_grad=True# NOTE: the requires_grad=True for the input is a current# limitation of checkpointing. At least one of the# model inputs should have requires_grad=True.# If you don't do it, you might have empty gradients.input = torch.rand(1, 10, requires_grad=True)layers = [nn.Linear(10, 10) for _ in range(1000)]# define function that will define where# we will checkpoint and store# intermediate gradients. In this case,# we will only store one intermediate# gradient, in the middle of the# modeldef run_first_half(*args): x = args[0] for layer in layers[:500]: x = layer(x) return xdef run_second_half(*args): x = args[0] for layer in layers[500:-1]: x = layer(x) return x# now uses the new checkpoint functionalityfrom torch.utils.checkpoint import checkpointx = checkpoint(run_first_half, input)x = checkpoint(run_second_half, x)# last output need to be run without checkpointx = layers[-1](x)x.sum.backward() # works!對于序列模塊(其里面不妨具備大肆塊),供給了扶助因變量 checkpoint_sequential,該因變量控制處置最罕見的用例,代碼如次:

input = torch.rand(1, 10, requires_grad=True)layers = [nn.Linear(10, 10) for _ in range(1000)]model = nn.Sequential(*layers)from torch.utils.checkpoint import checkpoint_sequential# split in two blocksnum_segments = 2x = checkpoint_sequential(model, num_segments, input)x.sum().backward() # works!瓶頸——用來辨別代碼熱門的東西

torch.utils.bottleneck(#5216,#6425)是一個東西,不妨用作初始辦法調(diào)節(jié)和測試步調(diào)中的瓶頸。它歸納了 Python 領(lǐng)會器和 PyTorch的 autograd 領(lǐng)會器的劇本運轉(zhuǎn)。相關(guān)更多精細(xì)消息,請參見瓶頸文書檔案。

reduce=False Losses

在新本子中,一切的丟失因變量都將扶助 reduce 要害字。指定 reduce= False,將歸來單元丟失的張量,而不是單個縮小的丟失。#4924,#5346,#5646,#4231,#4705,#5680

模塊及其矯正

增添 DistributedDataParallelCPU 模塊。這與 DistributedDataParallel模塊一致,但它更更加扶助在 CPU 上運轉(zhuǎn)的模子(這與 DistributedDataParallel模塊差異,它更扶助 GPU),同聲它還扶助 mpi,gloo 和 tcp 后端。#5919

增添 Group Normalization 模塊(nn.GroupNorm),動作批量規(guī)范化的代替計劃,這個模塊在處置小批量數(shù)據(jù)時,不會遇到與 BatchNorm模塊溝通的題目

增添 Layer Normalization 模塊(nn.LayerNorm),這是NLP工作中常常用來代替批量規(guī)范化的本領(lǐng)。#4922

增添 Local Response Normalization 模塊(nn.LocalResponseNorm)。#4922

新本子中,MaxPool3d 模塊不妨扶助雙反向功效。同聲,MaxPool3d 和 MaxUnpool3d將運用與其余池化本領(lǐng)相普遍的索引。#5328

一切丟失因變量此刻都扶助用一個 reduce 參數(shù)來歸來批丟失值。#264

將 util 增添到 torch.nn.utils.clip_grad 中的剪輯梯度值,并在 torch.nn.init中將 param 增添到 He 初始化計劃中。#6173

將 torch.nn.init.* 本領(lǐng)改名,并最后以次劃線結(jié)果的情勢,而且棄用舊本子的定名情勢,二者的功效沒有太大變革 # 6093

在 DataParallel 本領(lǐng)中減少了對歸來字典情勢的扶助#6113

在 torch.nn.Bilinear 本領(lǐng)中減少了對 N-D 張量的扶助#5764

增添 Embedding.from_pretrained 模塊。這承諾運用現(xiàn)有的張量來初始化嵌入層,并繞過它的權(quán)重值來隨機初始化。

新本子中,你此刻不妨辨別運用 nn.Sequential,nn.ModuleLis t和 nn.ParameterList模塊#4491

新本子中,你不妨備案 nn.Module 模塊的整型參數(shù)平靜沖區(qū),它將不復(fù)受 module.float(),module.double()及 module.half()挪用的感化。#3820

▌torch 中的散布

新本子中,torch.distributions 已擴充到囊括24個基礎(chǔ)幾率散布:伯努利,Beta,二項式,分門別類,Cauchy,Chi2,Dirichlet,指數(shù),F(xiàn)isherSnedecor,Gamma,好多,Gumbel,拉普拉斯,LogNormal,多項式,多元正態(tài),Normal,OneHotCategorical,Pareto,Poisson,RelaxedBernoulli,RelaxedOneHotCategorical,StudentT和Uniform散布等。

新本子中,Distribution 接口也已擴充為包括很多本領(lǐng):.cdf(),.icdf(),.mean(),.variance(),.entropy()和 .perplexity()。其余,Distributions 還能將張量維度領(lǐng)會為 sample_shape+ batch_shape + event_shape 的形式。此刻,大普遍貫串散布還能實行了一個自微分進程,如在保護 .has_rsample本領(lǐng)可用性的基礎(chǔ)下,你不妨運用 .rsample()本領(lǐng)來計劃逐路途的導(dǎo)數(shù)值,這也稱重參數(shù)化本領(lǐng),代碼如次:

>>> loc = torch.tensor(0., requires_grad=True)>>> scale = torch.tensor(1., requires_grad=True)>>> samples = Normal(loc, scale).rsample(sample_shape=(1000,))>>> loss = (samples - 0.5).pow(4).mean() # average over 1000 monte carlo samples>>> grad(loss, [loc, scale])(tensor(-7.5092), tensor(15.2704))大普遍分割散布的實行都依附于 .enumerate_support()本領(lǐng),在保護 .has_enumerate_support本領(lǐng)可用性的基礎(chǔ)下,你不妨經(jīng)過這個本領(lǐng)輕快地匯總一切大概的樣品值。

kl_divergence 是為很多散布對設(shè)置的,比方:

>>> x = torch.tensor(1.0, requires_grad=True)>>> kl = kl_divergence(Uniform(-x, x), Normal(0., 1.))>>> grad(kl, [x])[0]tensor(-0.6667)散布變幻

經(jīng)過將 TransformedDistribution 與 torch.distributions.transforms庫中的大肆數(shù)目的 Transform 東西舉行拉攏,來創(chuàng)造新的散布,這囊括:ExpTransform,PowerTransform,SigmoidTransform,AbsTransform,AffineTransform,SoftmaxTransform,StickBreakingTransform,LowerCholeskyTransform 以及經(jīng)過 .inv 屬性樹立的散布倒數(shù)。

散布牽制

散布將供給相關(guān)它們的扶助 .support 及它們的參數(shù)牽制 .arg_constraints 的元數(shù)據(jù)。那些 Constraint 東西運用 transform_to()和 biject_to()舉行變換備案。 經(jīng)過牽制和變換,不妨很簡單地以通用的辦法指定新的散布,代碼如次:

>>> scale = torch.tensor(1., requires_grad=True)>>> p = Normal(0., scale)>>> assert p.arg_constraints['scale'] == constraints.positive>>> prior = TransformedDistribution(Normal(0., 1.),... transform_to(constraints.positive))torch.distributions.constraints 庫中的牽制囊括:boolean,greater_than(lower_bound),integer_interval(lower_bound,upper_bound),interval(lower_bound,upper_bound),lower_cholesky,lower_triangular,nonnegative_integer,positive,positive_definite,positive_integer,real,real_vector 和 unit_interval。

▌散布式

啟用散布式演練的適用扶助步調(diào)

新本子中,咱們增添了一個適用步調(diào)功效來扶助啟用散布式樹立下的處事。運用 DistributedDataParallel的劇本,不妨啟用單節(jié)點或多節(jié)點步調(diào),咱們不妨按如次本領(lǐng)運用 torch.distributed launch

python -m torch.distributed.launch my_script.py --arg1 --arg2 --arg3該劇本簡化了 distributed 軟硬件包的凡是可用性。

你還不妨經(jīng)過以次鏈接觀賞它的精細(xì)用法:

http://pytorch.org/docs/stable/distributed.html#launch-utility

鑒于 NCCL 2.0 的新散布式后端

新本子的 PyTorch中增添了一個新的散布式后端,它不妨運用 NCCL 2.0 贏得最高運轉(zhuǎn)速率。它還為多個GPU上的集群操縱供給了新的API。

你不妨經(jīng)過如次代碼起用新的后端:

torch.distributed.init_process_group("nccl")其余的散布式革新

兼并很多小播送以普及本能#4978

為散布式演練增添攙和精度的功效扶助#4891

頒布 NCCL 散布式后端。在先前的本子中它不過動作試驗品#4921

為 Gloo 數(shù)據(jù)通道起用 Infiniband 扶助,并機動檢驗和測定 IB 擺設(shè)#4795

▌C++拓展

先前的本子中,運用 C 或 CUDA 為用戶編寫自設(shè)置的擴充模塊的一種官方辦法是經(jīng)過 cffi 擴充模塊。這種本領(lǐng)的缺陷是它須要一個獨立的辦法來編寫翻譯CUDA 內(nèi)核,這大概有點煩惱。

在新本子中,PyTorch 供給了一個更好的體例來編寫本人的 C++/CUDA 擴充。運用這種新擴充扶助的示例實行不妨在 pytorch/cpp_extensions 堆棧中找到。

在此,咱們供給兩種編寫翻譯形式:

提早編寫翻譯:運用新的 CppExtension 或 CUDAExtension 模塊編寫 setup.py 劇本,這是 setuptools.Extension 模塊的擴充;

及時編寫翻譯:將須要編寫翻譯的 C++/CUDA 文獻列表傳播給 torch.utils.cpp_extension.load,它將舉行及時編寫翻譯并為你緩存那些庫。以次示例講說領(lǐng)會實行這種擴充的簡單水平:

在 C++中

// my_implementation.cpp#include <torch/torch.h>#include <unordered_set>// can use templates as well. But let's keep it// simpleusing scalar_t = float;at::Tensor unique_float(at::Tensor input_) { // only works for floats AT_ASSERT(input_.type().scalarType() == at::ScalarType::Float, "input must be a float tensor"); // and CPU tensors AT_ASSERT(!input_.type().is_cuda(), "input must be a CPU tensor"); // make the input contiguous, to simplify the implementation at::Tensor input = input_.contiguous(); // get the pointer that holds the data scalar_t* input_data = input.data<scalar_t>(); // let's use a function from the std library to implement // the unique function std::unordered_set<scalar_t> set(input_data, input_data + input.numel()); // create the output tensor, with size set.size() at::Tensor output = input.type().tensor({static_cast<int64_t>(set.size())}); scalar_t* output_data = output.data<scalar_t>(); // copy the content of the set to the output tensor std::copy(set.begin(), set.end(), output_data); return output;}// this defines the functions exposed to PythonPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { m.def("unique_float", &unique_float, "Unique for float tensors");}在 Python 中

import torchfrom torch.utils.cpp_extension import load as load_ext# pass the source files, they will be compiled on the fly# and will return a python module_C = load_ext('my_unique_lib', sources=['my_implementation.cpp'])# now can use the functions implemented in C++unique = _C.unique_floata = torch.tensor([1.0, 2.0, 1.0])print(unique(a))# tensor([ 2., 1.])▌Window 扶助

新本子中,PyTorch 將正式扶助 Windows。咱們?yōu)?Python3.5和 3.6 供給摘編譯的 Conda 二進制文獻和 pip 文獻。

然而,Windows 上的 PyTorch 不扶助散布式演練,這大概會比 Linux/OSX體例上運轉(zhuǎn)得慢一點,由于 Visual Studio 扶助較早本子的 OpenMP。

與平常一律,你不妨在 Pytorch 官網(wǎng)上(http://pytorch.org)找到在Windows 體例安置 PyTorch的吩咐。其余,你還不妨經(jīng)過考察http://pytorch.org/docs/stable/notes/windows.html,這邊不妨為你回答Window 體例中 Pytorch 本子大概遇到的一切題目。

▌ONNX 矯正

新的 ONNX 操縱

扶助輸入 torch.max(input,dim)和 torch.min(input,dim)#6220

為 ReLU 因變量增添標(biāo)記以扶助導(dǎo)出到 ONNX#5759

增添 sum,prod,sqrt 并矯正 log_softmax 本領(lǐng)#4579

為 InstanceNorm 本領(lǐng)增添 ONNX 扶助#4626

為 Elu 因變量增添 ONNX 標(biāo)記#3453

為 UpsamplingNearest2d 模塊增添 ONNX 標(biāo)記#3450

矯正之處

當(dāng) ONNX 導(dǎo)出波折時打字與印刷目的的源場所#5652

將 onnx protobuf 綁定導(dǎo)出到 python中#6651

在 ConvTranspose 模塊中扶助 output_padding 本領(lǐng)#4583

更好的 RNN 扶助

新本子的 PyTorch 不妨將一局部 RNN 導(dǎo)出到 ONNX 中#4409

將 Elman RNN 的輸入增添到 ONNX#4613

在 ONNX 導(dǎo)出的彌補序列中扶助批次優(yōu)先規(guī)則#5360

將雙向 Elman RNN 的輸入增添到 ONNX 中#5120

將 RNN 導(dǎo)出到 ONNX 中再不精確處置序列長度#4695

扶助 GRU 導(dǎo)出到 ONNX 中#4390

Bug建設(shè)

建設(shè) ONNX 中的 3D 平衡池化bug#6101

建設(shè)復(fù)制/曲射板上的 onnx 導(dǎo)出#4263

▌其余矯正

為張量實行 __dir__ 本領(lǐng),再不不妨機動編纂并查問張量中大概的字段

將 numpy()和 from_numpy()本領(lǐng)增添到 HalfTensor中

起用 TensorDataset,再不輸出大肆數(shù)目的張量。

將 padding_value 本領(lǐng)增添到 torch.nn.utils.rnn.pad_sequence模塊中

將 total_length 選項增添到 pack_padded_sequence 模塊中,這在運用DataParallel 模塊時將變得特殊有效,由于咱們不妨保證咱們運用溝通長度的序列。

普及 torch.arange 的數(shù)值精度,使其與 numpy.arange 普遍

矯正 torch.load()和torch.save()本領(lǐng)以扶助大肆一致文獻的東西

矯正 torch.nn.functional.grid_sample 模塊以扶助 2D(空間)和 3D(體積)的輸出

在 DataLoader 中樹立 python 的隨機健將,以普及試驗的可反復(fù)性

將 __delitem__ 本領(lǐng)增添到 nn.Sequential 模塊中。在新本子中不妨簡略 nn.Sequential模塊的大肆元素。比方:

model = nn.Sequential(nn.Linear(2, 2), nn.ReLU(), nn.Linear(2, 2))del model[1] # deletes nn.ReLU新本子中的 ReduceLROnPlateau 不妨舉行序列化#5300

增添選項以廢除 CPU上的非平常數(shù)字#5294

新本子中 PyTorch 將公然 conv1d,conv2d 和 conv3d 所對應(yīng)的輸出和權(quán)重的變革情景#5408

增添對列表大概張量運用時 pack_padded_sequence 的挪用扶助#5133

扶助 nn.Embedding 本領(lǐng)中的 padding_idx 的負(fù)索引值#4496

增添對 pack_padded_sequence 反向傳遞進程的扶助#4512

將nn.utils.rnn.pad_sequence和nn.utils.rnn.pack_sequence增添到可變長度張量的彌補列表中,并打包一個可變長度張量列表。

增添 torch.cuda.memory_cached,torch.cuda.max_memory_cached,torch.cuda.memory_allocated和 torch.cuda.max_memory_allocated本領(lǐng),用來查看 CUDA 外存運用情景#4511

即使新的視圖尺寸與張量的原始尺寸和步幅兼容,則承諾察看非貫串張量。#4062

新本子中 NLLLoss 和 CrossEntropyLoss 不妨扶助2個之上的維度。#4654

增添一個選項以不表露 model_zoo 的載入進度條#4135

新本子中你不妨將模塊調(diào)配給 nn.Sequential 的索引。#4931

新本子中你不妨用一個 numpy array 本領(lǐng) np.longlong 來創(chuàng)造張量#4367

變動autograd實行程序再不更好的運用,這也將大大革新大模子的外存運用量。#4746

將 AMSgrad 形式增添到 Adam 和 SparseAdam優(yōu)化器中。#4034

增添更好的 torch.autograd.profiler 以扶助運用 cudaEventAPI 舉行 CUDA 領(lǐng)會。#3734

新本子中 torch.set_num_threads 不妨樹立相映的 MKL 選項,所以你不復(fù)須要運用情況變量來遏制它。#4949

▌本能的普及

加快 CPU 中 nn.EmbeddingBag 模塊,使得演練得總體速率普及30%#5433

將 Python 中的 nn.MarginRankingLoss,nn.CosineEmbeddingLoss,nn.HingeEmbeddingLoss 和 nn.TripletMarginLoss移到 Aten 后端,在某些情景下這將使本能提高3倍。#5346,#5646,#5080,#5680

將 pin_memory()動作 NativeFunction 實行#4094

生存用來反向計劃 self.numel()因變量而不是用來儉樸外存的 self 參數(shù)#5747

在一定情景下,逐點重陳設(shè)操縱不妨使本能普及10倍。#4174

在小案例中將 normal_ 向量化不妨帶來5-6倍本能加快#4312

承諾在新版 PyTorch 中運用 GPU Direct 舉行播送操縱#4183

為3D 輸出案例加快 nn.Linear 模塊#5279

經(jīng)過并行化 vol2col 和 col2vol加快 CPU 上的 Conv3D 操縱#4824

為 sigmoid 因變量增添 AVX2 實行,試驗表白這將帶來大概10倍的本能加快#5010

運用趕快平頭除法算法來制止內(nèi)核中的除法演算的外存占用。#5054

普及 CUDA 中隨機數(shù)天生的外存占用率#5710

為慣例典型的優(yōu)化增添規(guī)范優(yōu)化情勢#5722

增添趕快融洽的 GLU 反向傳遞進程#5782

經(jīng)過運用 std :: vector + sort 而不是 std ::set 來優(yōu)化特殊排序,這不妨帶來高達5倍的本能加快。#5913

加速維數(shù)的乞降進程#6026

在前向和反向進程起用 MKLDNN 卷積操縱。#6062

運用 OpenMP 并行化非貫串的逐點操縱#2764

將 Cudnn Tensor Core 操縱增添到 Volta 的 RNN 中#3409

向量化 exp,log,sin,cos#6078

在多個反向進程中經(jīng)過 grad_inputs 來反復(fù)運用中央截止#3526

散布式

DistributedDataParallel:運用攙和精度扶助的 NCCL 后端,這將帶來10%的本能提高#5064

稍微普及 DistributedDataParallel 模塊在多過程散布式演練上面的本能(單 GPU 綁定)#4870

▌bug 建設(shè)

torch 操縱

矯正 torch.digamma 操縱以普及頂點鄰近的精度#6517

建設(shè) Tensor.random 操縱的負(fù)輸出 bug#6463

建設(shè) tensor.permute(dims)操縱在反向進程中對負(fù)值 dims 不決義動作 bug#5945

建設(shè) torch.remainder 演算符中的平頭溢出bug(它將在以2**48為除數(shù)時阻礙)#5906

建設(shè) torch.bmm 操縱中的外存揭發(fā) bug#5744

使 scatter_add_ 的維度查看器與 scatter_ 的普遍#5659

建設(shè) CPU torch.multinomial 操縱中非貫串幾率的張量輸出 bug(先前的本子,它會掩蓋輸出的數(shù)據(jù))#5093

建設(shè) CUDA torch.multinomial 運用不精確的步幅并不妨采用零幾率事變的 bug#5774,#5238

扶助 index_select 的空索引張量#3429

扶助 CUDA Tensor.put_ 中的空索引張量#4486

運用空張量普及 torch.cat 的寧靜性#3602,#5971,#5819

在任何輸出尺寸未對齊的情景下建設(shè) torch.fft #6118

矯正 CUDA btrifact 的缺點動靜#5644

未乞求 torch.symeig 時,為特性向量張量歸來零#3411

建設(shè)張量上的 torch.btrifact 操縱#4318

建設(shè)張量上的 torch.pstrf 操縱#4883

建設(shè) torch.median 中的外存揭發(fā)#6889

當(dāng)some = False 6870時,建設(shè) SVD 操縱中反向進程的非方形矩陣 bug

core

檢驗和測定 _C 共享庫的從新初始化,這常常會引導(dǎo)少許缺點 bug#6232

建設(shè)一切零字節(jié)張量的索引 bug#3926

只承諾運用稀疏浮點典型動作默許張量典型#5674

在將 CUDA 張量典型樹立前初始化 CUDA 以提防其解體#4788

即使 CUDA 未初始化,建設(shè) from_dlpack 中的波折缺點。#4182

運用 numpy 數(shù)組,建設(shè)創(chuàng)造 CUDA 張量時的解體#5850

在某些操縱體例上,建設(shè)多處置過程中的空張量共享題目#6229

autograd

恢復(fù) allow_unused 功效:當(dāng)可微分輸出未被運用或沒轍考察時拋墮落誤#6553

建設(shè) output_nr 未被精確遞加的題目。這引導(dǎo)在某些輸出不須要 _grad 的操縱在反向傳遞進程中爆發(fā)解體#4812

建設(shè) torch.autograd.profiler 中的 nvprof 領(lǐng)會題目#5840

nn 層

僅扶助在一定維度中為自符合池指定巨細(xì)#3127

建設(shè)曲射彌補邊境查看,以制止失效的外存考察#6438

建設(shè) NLLLoss 的缺點動靜#5299,#6072

在 CUDA 上建設(shè) kl_div 的反向進程。先前本子中它在計劃 gradInput時不會商量 gradOutput#5814

建設(shè)線性的缺點缺點巨細(xì)#5992

建設(shè)nn.functional.convNd 和 nn.functional.conv_transposeNd 模塊的缺點動靜#5701

查看輸出的維度與目的能否配合,而不是與少許丟失因變量的元素數(shù)目配合#5085

建設(shè) torch.diag 操縱在反向傳遞進程所歸來方形突變與非方形輸出#4538

建設(shè)卷積典型不配合的缺點動靜#5815

增添 align_corners 選項再不舉行線性插值上采集樣品操縱,并使默許上采集樣品動作與其余框架相普遍#5927

當(dāng) log_input = False 時,提防 poisson_nll_loss 展示數(shù)值題目#3336

CUDA

保證卷積權(quán)重是貫串的,以建設(shè) CUDA ConvTranspose 中的雙反向操縱#4543

二次建設(shè) CUDA 中的反向傳遞進程#4460

稠密性

建設(shè)當(dāng) sparse = True 時的嵌入運用題目#4686

當(dāng)輸出僅包括 padding_idx 時,建設(shè)反向傳遞進程的稠密嵌入題目#6211

處置從 CPU,GPU 空稠密張量的復(fù)制題目。#5361

DataLoader

將參數(shù)查看增添到 torch.utils.data.Sampler 類中,建設(shè) DataLoader試驗將所有數(shù)據(jù)集加載到非平頭批處置巨細(xì)的題目。#6249

樹立 dataloader.batch_size = None 時給出 batch_sampler,建設(shè) DataLoader將 batch_size 匯報為1的缺點。#6108

革新 DataLoader 中的旗號處置題目#4643

封閉時忽視 FileNotFoundError 題目#5380

建設(shè)預(yù)處置的決定性題目#4640

Optim

在加載優(yōu)化步調(diào)狀況字典時以普及張量天生的可用性#3658

以決定性程序列出模子參數(shù)以普及 load_state_dict()的寧靜性#6031

為一切優(yōu)化器增添參數(shù)范疇查看#6000

建設(shè) SparseAdam 的 AMSGrad 形式題目#4314

散布式和多 GPU

建設(shè)因為辨別缺點而引導(dǎo)的少許散布式演練缺點#5829

在 no_grad 模塊中運轉(zhuǎn) DataParallel 時,不要竄改 requires_grad#5880

為散布式數(shù)據(jù)并行寧靜性增添 broadcast_coalesce 的 GPU 養(yǎng)護#5655

作家:soumith

原文鏈接:

https://github.com/pytorch/pytorch/releases/tag/v0.4.0

專題推薦:

江門回收廢鋁

江門回收廢銅

江門回收廢鐵

江門回收廢紙

江門廢紙回收

江門廢塑料回收

江門廢銅回收

江門廢鋁回收

江門廢鐵回收

中山廢品回收

廣東廢品回收

江門廢品回收

江門起重機安裝

江門廢品站


最新廣東省江門市