主頁 > 知識(shí)庫 > Pytorch實(shí)現(xiàn)張量的創(chuàng)建與使用方法

Pytorch實(shí)現(xiàn)張量的創(chuàng)建與使用方法

熱門標(biāo)簽:百度地圖標(biāo)注沒有了 外呼并發(fā)線路 ai電銷機(jī)器人源碼 地圖標(biāo)注審核表 ai電話機(jī)器人哪里好 西藏房產(chǎn)智能外呼系統(tǒng)要多少錢 長沙高頻外呼系統(tǒng)原理是什么 湛江智能外呼系統(tǒng)廠家 宿遷星美防封電銷卡

張量的創(chuàng)建及其基本類型

1.張量(Tensor)函數(shù)創(chuàng)建方法

張量最基本的創(chuàng)建方法和Numpy中創(chuàng)建Array的格式一樣,都是創(chuàng)建函數(shù)(序列)的格式:張量創(chuàng)建函數(shù): torch.tensor()

import torch 

# 通過列表創(chuàng)建張量
t = torch.tensor([1,2])

# 通過元組創(chuàng)建張量
t = torch.tensor((1,2))

import numpy as np

a = np.array((1,2))
# 通過數(shù)組創(chuàng)建張量
t1 = torch.tensor(a)
"""
輸出結(jié)果為 tensor([1,2],dtype=torch.int32)
Point: 通過上述返回結(jié)果,我們發(fā)現(xiàn)張量也有dtype類型
"""

2.張量的類型

張量和數(shù)組類似,都有dtype方法,可返回張量類型.我們發(fā)現(xiàn),整數(shù)型的數(shù)組默認(rèn)創(chuàng)建int32(整型)類型,而張量默認(rèn)創(chuàng)建int64(長整型)類型。相對(duì)的,創(chuàng)建浮點(diǎn)型數(shù)組時(shí),張量默認(rèn)是float32(單精度浮點(diǎn)型),而Array則是默認(rèn)float64(雙精度浮點(diǎn)型)。除了數(shù)值型張量,常用的常量類型還有布爾型張量,也就是構(gòu)成張量的各個(gè)元素都是布爾類型的張量。

3.張量類型的轉(zhuǎn)化

張量類型的隱式轉(zhuǎn)化
和NumPy中的Array相同,當(dāng)張量各元素屬于不同類型時(shí),系統(tǒng)會(huì)自動(dòng)進(jìn)行隱式轉(zhuǎn)化。

# 為了保證數(shù)據(jù)精度,傾向于統(tǒng)一轉(zhuǎn)化成數(shù)據(jù)精度比較高的
# 浮點(diǎn)型和整數(shù)型的隱式轉(zhuǎn)化
torch.tensor([1.1,2])

# 布爾型和數(shù)值型的隱式轉(zhuǎn)化
torch.tensor([True,2.0])

張量類型的轉(zhuǎn)化方法

當(dāng)然,我們還可以使用.float(),.int()等方法對(duì)張量類型進(jìn)行轉(zhuǎn)化。

t = torch.tensor([1,2])

# 轉(zhuǎn)化為默認(rèn)浮點(diǎn)型(32位)
t.float()

# 轉(zhuǎn)化為雙精度浮點(diǎn)型
t.double()

# 轉(zhuǎn)化為16位整數(shù)
t.short()

張量的維度及形變

張量作為一組數(shù)的結(jié)構(gòu)化表示,也同樣有維度的概念,簡單理解,向量就是一維的數(shù)組,而矩陣則是二維的數(shù)組,以此類推,在張量中,我們還可以定義更高維度的數(shù)組。當(dāng)然,張量的高維數(shù)組和Numpy中的高維Array概念類似。

1.創(chuàng)建高維張量

用簡單序列創(chuàng)建一維數(shù)組
包含"簡單"元素的序列可創(chuàng)建一維數(shù)組。

t1 = torch([1,2])
t1 

# 使用ndim屬性查看張量的維度
t1.ndim

# 使用shape查看形狀
t1.shape

# 和size函數(shù)相同
t1.size()

注:和Numpy不同,PyTorch中的size方法返回結(jié)果和shape屬性返回結(jié)果一致。

此外,還需要注意有兩個(gè)常用的函數(shù)/方法,用來查看張量的形狀。

# 返回有幾個(gè)(N-1)維元素
len(t1)

# 返回總共有幾個(gè)數(shù)
t1.numel()

用"序列"的"序列"創(chuàng)建二維數(shù)組
以此類推,我們還可以用形狀相同的序列組成一個(gè)新的序列,進(jìn)而將其轉(zhuǎn)化為二維張量

# 用list的list創(chuàng)建二維數(shù)組
t2 = torch([[1,2],[3,4]])

零維張量
在PyTorch中,還有一類特殊的張量,被稱為零維張量。該類型只包含一個(gè)元素,但又不是單獨(dú)一個(gè)數(shù)。

t0 = torch.tensor([1])  # 這個(gè)仍然是一維張量
t0 = torch.tensor(1)    # 這個(gè)是零維張量

理解零維張量:
目前我們可以將零維張量視為擁有張量屬性的單獨(dú)的一個(gè)數(shù)。(例如: 張量可以存在GPU上,但Python的原生數(shù)值對(duì)象不行,但零維張量就可以,盡管是零維。)從學(xué)術(shù)名稱來說,Python中單獨(dú)的一個(gè)數(shù)是scalars(標(biāo)量),而零維的張量則是tensor。

高維張量
一般來說,三維及三維以上的張量,我們就將其稱為高維張量。當(dāng)然,在高維張量中,最常見的還是三維張量,我們可以將其理解為二維數(shù)組或矩陣的集合。

a1 = np.array([[1,2,2],[3,4,4]])
a2 = np.array([[5,6,6],[7,8,8]])
t3 = torch.tensor([a1,a2])
t3.shape   # 結(jié)果為torch.Size([2,2,3])   包含兩個(gè)兩行三列的矩陣

當(dāng)然,N維張量的創(chuàng)建方法,我們可以先創(chuàng)建M個(gè)N-1維的數(shù)組,然后將其拼成一個(gè)N維的張量。關(guān)于更高維度的張量,我們將在后續(xù)遇到時(shí)再進(jìn)行講解。在張量的學(xué)習(xí)過程中,三維張量就已經(jīng)足夠。

2.張量的形變

張量作為數(shù)字的結(jié)構(gòu)化集合,其結(jié)構(gòu)也是根據(jù)需求靈活調(diào)整的。

2.1 flatten拉平: 將任意維度張量轉(zhuǎn)化為一維張量

t2 = torch.tensor([[1,2]
                  ,[3,4]])
t2.flatten()   # 把張量按行排列拉平

2.2 reshape方法: 任意變形

t1 = tensor([1.2])
# 轉(zhuǎn)化為兩行一列的張量
t1.reshape(2,1)
"""
結(jié)果為: tensor([[1],[2]])
注意: reshape過程中維度的變化: reshape轉(zhuǎn)化后的維度由該方法輸入的參數(shù)"個(gè)數(shù)"決定
"""

特殊張量的創(chuàng)建方法

在很多數(shù)值科學(xué)計(jì)算的過程中,都會(huì)創(chuàng)建一些特殊取值的張量,用于模擬特殊取值的矩陣,如全0矩陣,對(duì)角矩陣等.因此,PyTorch中也存在很多創(chuàng)建特殊張量的函數(shù)。

1.特殊取值的張量的創(chuàng)建方法

全0張量

torch.tensor([2,3])  # 創(chuàng)建全是0的兩行三列的矩陣

注: 由于zeros就已經(jīng)確定的張量元素的取值,因此該函數(shù)傳入的參數(shù)實(shí)際上是決定了張量的形狀

全1張量

torch.ones([2,3])

單位矩陣

# 返回五行五列的單位矩陣,對(duì)角線元素全為1
torch.eyes(5)

對(duì)角矩陣
略有特殊的是,在PyTorch中,需要利用一維張量取創(chuàng)建對(duì)焦矩陣。

t1 = torch.tensor([1,2])
torch.dialog(t1)
"""
輸出結(jié)果為: tensor([[1,0],
                   [0,2]])
"""

rand: 服從0-1均勻分布的張量

torch.rand(2,3)

randn: 服從標(biāo)準(zhǔn)正態(tài)分布的張量

torch.randn(2,3)

normal: 服從指定正態(tài)分布的張量

torch.normal(2,3,size=(2,2))  # 均值為2,標(biāo)準(zhǔn)差為3的張量

randint: 整數(shù)隨機(jī)采樣結(jié)果

torch.randint(1,10,[2,4]) # 在1-10之間隨機(jī)抽取整數(shù),組成兩行四列的矩陣

arrange/linsapce: 生成數(shù)列

torch.arrange(5)     # 和range相同
"""
結(jié)果為:
     tensor([0,1,2,3,4])
"""
torch.arraneg(1,5,0.5)    # 從1到5(左閉右開),每隔0.5取值一次
torch.linspace(1,5,3)     # 從1到5(左右都包含),等距取3個(gè)數(shù)

empty: 生成位初始化的指定形狀矩陣

torch。empty(2,3)

full: 根據(jù)指定形狀,填充指定數(shù)值

torch.full([2,4],2)

2.創(chuàng)建指定形狀的數(shù)組

當(dāng)然我們還能根據(jù)指定對(duì)象的形狀進(jìn)行數(shù)值填充,只需要在上述函數(shù)后面加上_like即可。

t1 = torch.tensor([1,2])
t2 = torch.tensor([[1,2],[3,4]])
torch.full_like(t1,2)    # 根據(jù)t1形狀,填充數(shù)值2
torch.randint_like(t2,1,10)
torch.zeros_like(t1)

Ponint: (1)更多_like函數(shù),可查閱幫助文檔

(2)需要注意一點(diǎn)的是,_like類型轉(zhuǎn)化需要注意轉(zhuǎn)化前后數(shù)據(jù)類型一致的問題;

torch.rand_like(t1)     # t1是整數(shù),而轉(zhuǎn)化后將變成浮點(diǎn)數(shù),此時(shí)代碼將報(bào)錯(cuò) 

張量和其他類型的轉(zhuǎn)化方法

張量,數(shù)組和列表是較為相似的三種類型對(duì)象,在實(shí)際操作過程中,經(jīng)常會(huì)涉及三種對(duì)象的相互轉(zhuǎn)化,在此之前張量的創(chuàng)建過程中,我們看到torch.tensor函數(shù)可以直接將數(shù)組或者列表轉(zhuǎn)化為張量,而我們也可以將張量轉(zhuǎn)化為數(shù)組或者列表。另外,前文介紹了0維張量的概念,此處也將進(jìn)一步給出零維張量和數(shù)值對(duì)象的轉(zhuǎn)化方法。

numpy方法: 張量轉(zhuǎn)化為數(shù)組

t1.numpy()
# 當(dāng)然也可以通過np.array函數(shù)直接轉(zhuǎn)化為array
np.array(t1)

tolist方法: 張量轉(zhuǎn)化為列表

t1.tolist()

list函數(shù): 張量轉(zhuǎn)化為列表

list(t1)

需要注意的是,此時(shí)轉(zhuǎn)化的列表是由一個(gè)個(gè)零維張量構(gòu)成的列表,而非張量的數(shù)值轉(zhuǎn)化成的列表。

.item()方法: 轉(zhuǎn)化為數(shù)值

在很多情況下,我們需要將最終計(jì)算的結(jié)果張量轉(zhuǎn)化為單獨(dú)的數(shù)值進(jìn)行輸出,此時(shí)需要使用.item方法來執(zhí)行。

n = torch.tensor(1)
n.item()

張量的深拷貝

Python中其他對(duì)象類型一樣,等號(hào)賦值操作實(shí)際上是淺拷貝,需要進(jìn)行深拷貝,則需要使用clone方法。

s = torch.tensor([1,2])
t = s.clone()

到此這篇關(guān)于Pytorch實(shí)現(xiàn)張量的創(chuàng)建與使用方法的文章就介紹到這了,更多相關(guān)Pytorch實(shí)現(xiàn)張量創(chuàng)建使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Pytorch使用PIL和Numpy將單張圖片轉(zhuǎn)為Pytorch張量方式
  • pytorch 實(shí)現(xiàn)張量tensor,圖片,CPU,GPU,數(shù)組等的轉(zhuǎn)換
  • pytorch中tensor張量數(shù)據(jù)類型的轉(zhuǎn)化方式

標(biāo)簽:大同 寧夏 漯河 盤錦 林芝 海南 普洱 南平

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Pytorch實(shí)現(xiàn)張量的創(chuàng)建與使用方法》,本文關(guān)鍵詞  Pytorch,實(shí)現(xiàn),張量,的,創(chuàng)建,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Pytorch實(shí)現(xiàn)張量的創(chuàng)建與使用方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Pytorch實(shí)現(xiàn)張量的創(chuàng)建與使用方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章