本篇文章為大家展示了Tensors該怎么入門,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)站營銷推廣,域名申請,網(wǎng)絡(luò)空間,綿陽服務(wù)器托管有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問題,請聯(lián)系創(chuàng)新互聯(lián)。
一、入門
1.Tensors(張量)
Tensors(張量)類似于NumPy中的ndarray,另外它還可以使用GPU加速計(jì)算。
from__future__import print_function
importtorch
構(gòu)造一個(gè)未初始化的5x3矩陣:
x = torch.empty(5, 3)
print(x)
輸出:
tensor([[-9.0198e-17, 4.5633e-41, -2.9021e-15],
[ 4.5633e-41, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00]])
構(gòu)造一個(gè)隨機(jī)初始化的矩陣:
x = torch.rand(5, 3)
print(x)
輸出:
tensor([[0.1525, 0.7689, 0.5664],
[0.7688, 0.0039, 0.4129],
[0.9979, 0.3479, 0.2767],
[0.9580, 0.9492, 0.6265],
[0.2716, 0.6627, 0.3248]])
構(gòu)造一個(gè)使用零填充、數(shù)據(jù)類型為long(長整型)的5X3矩陣:
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
輸出:
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
直接用一組數(shù)據(jù)構(gòu)造Tensor(張量):
x = torch.tensor([5.5, 3])
print(x)
輸出:
tensor([5.5000, 3.0000])
或者根據(jù)現(xiàn)有的Tensor(張量)創(chuàng)建新的Tensor(張量)。除非用戶提供新值,否則這些方法將重用輸入張量的屬性,例如dtype:
x = x.new_ones(5, 3, dtype=torch.double) # 使用new_* 方法設(shè)定維度
print(x)
x = torch.randn_like(x, dtype=torch.float) # 重新設(shè)定數(shù)據(jù)類型
Print(x) # 結(jié)果維度不變
輸出:
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[ 0.4228, 0.3279, 0.6367],
[ 0.9233, -0.5232, -0.6494],
[-0.1946, 1.7199, -0.1954],
[ 0.1222, 0.7204, -1.3328],
[ 0.1230, -0.5800, 0.4562]])
輸出它的大?。?/p>print(x.size())
輸出:
torch.Size([5, 3])
【注意:torch.Size 實(shí)際上是一個(gè)元組,因此它支持所有元組操作。】
2. 運(yùn)算
Tensor運(yùn)算有多種語法。在下面的示例中,我們將先示例加法運(yùn)算。
加法運(yùn)算:語法1
y = torch.rand(5, 3)
print(x + y)
輸出:
tensor([[ 0.0732, 0.9384, -0.2489],
[-0.6905, 2.1267, 3.0045],
[ 0.6199, 0.4936, -0.0398],
[-2.0623, -0.5140, 1.6162],
[ 0.3189, -0.0327, -0.5353]])
加法運(yùn)算:語法2
print(torch.add(x, y))
輸出:
tensor([[ 0.0732, 0.9384, -0.2489],
[-0.6905, 2.1267, 3.0045],
[ 0.6199, 0.4936, -0.0398],
[-2.0623, -0.5140, 1.6162],
[ 0.3189, -0.0327, -0.5353]])
加法運(yùn)算:使用輸出Tensor(張量)作為參數(shù)
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
輸出:
tensor([[ 0.0732, 0.9384, -0.2489],
[-0.6905, 2.1267, 3.0045],
[ 0.6199, 0.4936, -0.0398],
[-2.0623, -0.5140, 1.6162],
[ 0.3189, -0.0327, -0.5353]])
加法運(yùn)算:內(nèi)聯(lián)接
# adds x to y
y.add_(x)
print(y)
輸出:
tensor([[ 0.0732, 0.9384, -0.2489],
[-0.6905, 2.1267, 3.0045],
[ 0.6199, 0.4936, -0.0398],
[-2.0623, -0.5140, 1.6162],
[ 0.3189, -0.0327, -0.5353]])
【注意:任何改變原張量實(shí)現(xiàn)內(nèi)聯(lián)接的操作都是通過在后邊加_ 實(shí)現(xiàn)的。例如:x.copy_(y),x.t_(),將將改變x的值?!?/p>
你可以像在NumPy中一樣使用索引及其他所有華麗的功能。
print(x[:, 1])
輸出:
tensor([ 0.3279, -0.5232, 1.7199, 0.7204, -0.5800])
Resizing(調(diào)整大小):如果要resize/reshape張量,可以使用torch.view:
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8) # -1是推斷出來的
print(x.size(), y.size(), z.size())
輸出:
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
如果你有只含一個(gè)元素的張量,可以用.item()獲取它的值作為Python數(shù)值
x = torch.randn(1)
print(x)
print(x.item())
輸出:
tensor([0.1550])
0.15495021641254425
【延伸閱讀:100+張量操作,包括置換,索引,切片,數(shù)學(xué)運(yùn)算,線性代數(shù),隨機(jī)數(shù)等等,被詳細(xì)描述在這里
(https://pytorch.org/docs/torch)?!?/p>
二、NUMPY橋接器
將Torch Tensor轉(zhuǎn)換為NumPy array是一件輕而易舉的事(反之亦然)。Torch Tensor和NumPyarray共享其底層內(nèi)存位置,更改一個(gè)將改變另一個(gè)。
1.將Torch Tensor轉(zhuǎn)換為NumPy array
a = torch.ones(5)
print(a)
輸出:
tensor([1., 1., 1., 1., 1.])
b = a.numpy()
print(b)
輸出:
[1. 1. 1. 1. 1.]
了解numpyarray的值如何變化。
a.add_(1)
print(a)
print(b)
輸出:
tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]
2. 將NumPy array轉(zhuǎn)換為Torch Tensor
了解如何自動(dòng)地將np array更改為Torch Tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
輸出:
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
除了Char(字符型)Tensor之外,CPU上的所有Tensors都支持轉(zhuǎn)換為NumPy及返回。
可以使用.to方法將張量移動(dòng)到任何設(shè)備上。
# 僅當(dāng)CUDA可用的情況下運(yùn)行這個(gè)cell
# 我們用 ``torch.device`` 對象實(shí)現(xiàn)tensors在GPU上的寫入與讀出if torch.cuda.is_available():
device = torch.device("cuda") # 一個(gè) CUDA 終端對象
y = torch.ones_like(x, device=device) # 直接在GUP上創(chuàng)建Tensor
x = x.to(device) # 或者直接使用字符串`.to("cuda")``
z = x + y
print(z)
print(z.to("cpu", torch.double)) # `.to`` 也可以改變對象數(shù)據(jù)類型
輸出:
tensor([2.4519], device='cuda:0')
tensor([2.4519], dtype=torch.float64)
腳本總運(yùn)行時(shí)間:(0分6.338秒)
上述內(nèi)容就是Tensors該怎么入門,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前文章:Tensors該怎么入門
瀏覽地址:http://jinyejixie.com/article46/gggdeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、企業(yè)網(wǎng)站制作、自適應(yīng)網(wǎng)站、定制網(wǎng)站、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)