pytorch學(xué)習(xí)(二)—Tensor

Tensor的引入

對(duì)于學(xué)習(xí)和使用一個(gè)開(kāi)源庫(kù)/框架馋没,開(kāi)發(fā)者最關(guān)心的2個(gè)問(wèn)題:如何傳參數(shù)如何調(diào)用API接口。 參數(shù)一般就是指數(shù)據(jù)類(lèi)型/數(shù)據(jù)結(jié)構(gòu)類(lèi)型, API接口具體指可以調(diào)用的函數(shù)齐莲、方法。

Tensor是pytorh中的數(shù)據(jù)類(lèi)型,表示一個(gè)N dims張量磷箕。在深度學(xué)習(xí)中,輸入/輸出數(shù)據(jù)阵难,網(wǎng)絡(luò)參數(shù)都用Tensor表示岳枷。

A torch.Tensor is a multi-dimensional matrix containing elements of a single data type.

https://pytorch.org/docs/stable/tensors.html

每種深度學(xué)習(xí)框架都有其數(shù)據(jù)結(jié)構(gòu):

Framework 數(shù)據(jù)類(lèi)型 特點(diǎn)
Caffe Blob N 維矩陣
TensorFlow Tensor N 維矩陣
pytorch Tensor N 維矩陣

不同類(lèi)型的Tensor

pytorch中的Tensor
torch.Tensor

torch定義了7中CPU類(lèi)型的Tensor, 以及8種GPU類(lèi)型的Tensor
https://pytorch-cn.readthedocs.io/zh/latest/package_references/Tensor/

數(shù)據(jù)類(lèi)型 CPU Tensor GPU Tensor
32bit float torch.FloatTensor torch.cunda.FloatTensor
64bit float torch.DoubleTensor torch.cunda.DoubleTensor
16bit float N/A torch.cuda.HalfTensor
8bit signed int torch.ByteTensor torch.cuda.ByteTensor
8bit unsigned int torch.CharTensor torch.cuda.CharTensor
16bit signed int torch.ShortTensor torch.cuda.ShortTensor
32bit signed int torch.IntTensor torch.cuda.IntTensor
64bit signed int torch.LongTensor torch.cuda.LongTensor

開(kāi)發(fā)環(huán)境

  • Ubuntu 18.04
  • pytorch 1.0.0
  • Anconda3 python3.6.6
  • pycharm

Tensor的創(chuàng)建以及常用方法

# 導(dǎo)入pytorch
import torch

# 創(chuàng)建一個(gè)3x3全1矩陣,Tensor
x1 = torch.ones(3, 3)
print(x1)

# 5x5 全0矩陣
x2 = torch.zeros(5, 5)
print(x2)

# 與x1同維0矩陣
x4 = torch.zeros_like(x1)
print(x4)

# 與x1同維全1矩陣
x5 = torch.ones_like(x1)
print(x5)

# 對(duì)角矩陣
x6 = torch.diag(torch.from_numpy(np.array([1, 2, 3, 4, 5])))
print(x6)

# 5x5 隨機(jī)矩陣
x7 = torch.rand(5, 5)
print(x7)

# 5x5 norm分布矩陣
x8 = torch.randn(5, 5)
print(x8)

# 創(chuàng)建一個(gè)empty Tensor
x9 = torch.empty(3, 3)
print(x9)

# 創(chuàng)建一個(gè)Tensor,給定數(shù)值
x10 = torch.Tensor([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
print(x10)

# 根據(jù)已有的Tensor創(chuàng)建一個(gè)新的Tensor
x11 = torch.rand_like(x10, dtype=torch.float)
print(x11)

# 獲取Tensor的size,  Tensor.Size 實(shí)際上是一個(gè)Tuple
print(x11.size())

# Tensor的in place 操作,會(huì)改變Tensor本身
x12 = torch.rand(3, 3)
print(x12.t_())
print(x12.copy_(x11))

# Tensor  resize/reshape操作
x13 = torch.randn(4, 4)
x14 = x13.view(16)          #16*1
print(x14)
x15 = x13.view(-1, 8)       # -1, 此維度根據(jù)另一個(gè)維度計(jì)算得到
print(x15)

# 只有一個(gè)數(shù)的Tensor,  使用xxx.item() 得到python 數(shù)值
x16 = torch.rand(1)
print(x16)
print(x16.item())

# 獲取Tensor中元素的個(gè)數(shù)
x17 = torch.randn(1, 2, 3, 4, 5)
print(torch.numel(x17))
print(torch.numel(torch.zeros(4, 5)))

# 判斷一個(gè)對(duì)象是否是Tensor
print(torch.is_tensor(x17))
print(torch.is_tensor(np.array([1, 2, 3, 4])))

# 判斷一個(gè)對(duì)象是否為Pytorch storage object
print(torch.is_storage(torch.empty(3, 3)))          #False???
print(torch.is_storage(np.zeros(shape=(3, 3))))     #False

# 設(shè)置Tensor的數(shù)據(jù)類(lèi)型呜叫,初始默認(rèn)為torch.float32
print(torch.Tensor([1.2, 3]).dtype)                 #float32
torch.set_default_dtype(torch.float64)
print(torch.Tensor([1.2, 3]).dtype)                 #float64

# 獲取默認(rèn)的Tensor數(shù)據(jù)類(lèi)型
print(torch.get_default_dtype())                    #float64
torch.set_default_dtype(torch.float32)
print(torch.get_default_dtype())                    #float32

Tensor常見(jiàn)的操作

  • 加減乘除
  • 矩陣運(yùn)算
  • 切片
rom __future__ import print_function
import torch


'''
pytorch矩陣操作
var = torch.Tensor()  返回一個(gè)Tensor

tensor1 = torch.Tensor(3, 3)
tensor2 = torch.Tensor(3, 3)
 var2 = torch.add(tensor1, tensor2)     # 矩陣加
 var3 = torch.sub(tensor1, tensor2)     # 減
 var4 = torch.mul(tensor1, tensor2)     # 乘
 var5 = torch.div(tensor1, tensor2)     # 矩陣點(diǎn)除
 var6 = torch.mm(tensor1, tensor2)      # 矩陣乘
 
'''

print(dir(torch.Tensor))
print(help(torch.tensor))

x1 = torch.Tensor(5, 3)  # 構(gòu)造一個(gè)5x3的Tensor
x2 = torch.rand(5, 3)    # 構(gòu)造一個(gè)隨機(jī)初始化的Tendor
print(x1.size())
print(x2.size())


# #####################Tensor相加################################
# 2個(gè)Tensor相加
y = torch.rand(5, 3)
var1 = torch.add(x1, y)

# 2個(gè)Tensor相加
var2 = x2 + y

var3 = torch.rand(5, 3)
# 2個(gè)Tensor相加
torch.add(x1, y, out=var3)
print(var3)

# Tensor相加空繁,y.add_() 會(huì)改變y的值
y.add_(x2)
print(y)

# #####################Tensor相減###############################
x3 = torch.rand(5, 5)
x4 = torch.rand(5, 5)

y2 = x3 - x4
y3 = torch.sub(x3, x4)
print(x3.sub_(x4))

# ###################Tensor相乘################################
x5 = torch.rand(3, 3)
x6 = torch.rand(3, 3)
y4 = x5 * x6            # 矩陣元素點(diǎn)乘
y5 = torch.mul(x5, x6)
print(x5.mul_(x6))

# ###################Tensor相除################################
x7 = torch.rand(5, 5)
x8 = torch.rand(5, 5)
y6 = x7 / x8
y7 = torch.div(x7, x8)
print(x7.div_(x8))

# #################Tensor矩陣乘################################
x9 = torch.rand(3, 4)
x10 = torch.rand(4, 3)
y8 = torch.mm(x9, x10)
# print(x9.mm_(x10))    # 錯(cuò)誤用法


# ###################矩陣切片###################################
# 矩陣切片
var4 = x2[:, 1]
print(var4)


Tensor與numpy.ndarray的轉(zhuǎn)換

在python中,numpy的使用很廣泛朱庆,numpy.ndarray表示一個(gè)高維的列表/容器盛泡。在數(shù)值計(jì)算中,numpy.ndarray表示一個(gè)高維的矩陣娱颊。與numpy相比傲诵,python中的Tensor既可以利用CPU計(jì)算凯砍,也可以利用GPU計(jì)算,然而numpy只能在CPU上計(jì)算拴竹。

import numpy as np
import torch


'''
torch.Tensor與numpy.ndarray的相互轉(zhuǎn)換

'''


x1 = torch.Tensor(5, 5)

# 將Tensor轉(zhuǎn)為numpy的ndarray
var1 = x1.numpy()
print(var1)

# 將numpy的ndarray轉(zhuǎn)為T(mén)ensor
x2 = np.ndarray(shape=(5, 5), dtype=np.int32)
var2 = torch.from_numpy(x2)
print(var2)

End

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悟衩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子栓拜,更是在濱河造成了極大的恐慌座泳,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幕与,死亡現(xiàn)場(chǎng)離奇詭異挑势,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)啦鸣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)潮饱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人赏陵,你說(shuō)我怎么就攤上這事饼齿。” “怎么了蝙搔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵缕溉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吃型,道長(zhǎng)证鸥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任勤晚,我火速辦了婚禮枉层,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赐写。我一直安慰自己鸟蜡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布挺邀。 她就那樣靜靜地躺著揉忘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪端铛。 梳的紋絲不亂的頭發(fā)上泣矛,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音禾蚕,去河邊找鬼您朽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛换淆,可吹牛的內(nèi)容都是我干的哗总。 我是一名探鬼主播几颜,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼魂奥!你這毒婦竟也來(lái)了菠剩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耻煤,失蹤者是張志新(化名)和其女友劉穎具壮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哈蝇,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棺妓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炮赦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怜跑。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吠勘,靈堂內(nèi)的尸體忽然破棺而出性芬,到底是詐尸還是另有隱情,我是刑警寧澤剧防,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布植锉,位于F島的核電站,受9級(jí)特大地震影響峭拘,放射性物質(zhì)發(fā)生泄漏俊庇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一鸡挠、第九天 我趴在偏房一處隱蔽的房頂上張望辉饱。 院中可真熱鬧,春花似錦拣展、人聲如沸彭沼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溜腐。三九已至,卻和暖如春瓜喇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歉糜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工乘寒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匪补。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓伞辛,卻偏偏與公主長(zhǎng)得像烂翰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚤氏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • torch 本筆記引用自PyTorch中文文檔 包torch包含了多維疑是的數(shù)據(jù)結(jié)構(gòu)及基于其上的多種數(shù)學(xué)操作甘耿。 1...
    zhaoQiang012閱讀 83,536評(píng)論 0 27
  • 概述 在新版本中,PyTorch引入了許多令人興奮的新特性竿滨,主要的更新在于 Variable和Tensor的合并 ...
    古de莫寧閱讀 6,143評(píng)論 0 1
  • 這幾天稍微進(jìn)行了有關(guān)手勢(shì)識(shí)別的知識(shí),盡管很基礎(chǔ),但還是想來(lái)分享一下. 一方面是關(guān)于手勢(shì)識(shí)別的演變過(guò)程.手勢(shì)識(shí)別的圖...
    乒乓貓閱讀 131評(píng)論 0 0
  • 神秘巨星 詮釋標(biāo)題的含義 (一)神秘巨星是心中的夢(mèng)想 神秘巨星既是小女孩尹希婭佳恬,又是她心中的音樂(lè)夢(mèng)想。就像她在電影...
    為為道來(lái)閱讀 157評(píng)論 0 3
  • 鏈表 代碼 1 : 代碼 2 :
    ibo閱讀 260評(píng)論 0 0