Ch01-01.Tensor操作(Pytorch入門)

1. 以_結(jié)尾操作

import torch
# adds x to y
y.add_(x) # 任何以_結(jié)尾的操作會(huì)用結(jié)果替換原變量
#例如x.copy_(y)震糖, x.t_(y)

2. .size()和.view()方法類似與numpy里面的.shape和.reshape()

x = x.new_ones(5, 3, dtype=torch.double)      # new_* 方法來(lái)創(chuàng)建對(duì)象
print(x)
x = torch.randn_like(x, dtype=torch.float)    # 覆蓋 dtype!
print(x)                                      #  對(duì)象的size 是相同的,只是值和類型發(fā)生了變化
# tensor([[1., 1., 1.],
#        [1., 1., 1.],
#        [1., 1., 1.],
#        [1., 1., 1.],
#        [1., 1., 1.]], dtype=torch.float64)
# tensor([[ 0.5691, -2.0126, -0.4064],
#        [-0.0863,  0.4692, -1.1209],
#        [-1.1177, -0.5764, -0.5363],
#        [-0.4390,  0.6688,  0.0889],
#        [ 1.3334, -1.1600,  1.8457]])
print(x.size())
# torch.Size([5, 3])

3.以結(jié)尾的操作都會(huì)用結(jié)果替換原來(lái)變量梨水, 例如x.copy(y), x.t_()都會(huì)改變x.

y.add_(x)
print(y)
# tensor([[ 0.7808, -1.4388,  0.3151],
#        [-0.0076,  1.0716, -0.8465],
#        [-0.8175,  0.3625, -0.2005],
#        [ 0.2435,  0.8512,  0.7142],
#        [ 1.4737, -0.8545,  2.4833]])

4 torch.view和numpy的reshape類似

y = x.view(16)
z = x.view(-1, 8)  #  size -1 從其他維度推斷
print(x.size(), y.size(), z.size())
# torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

5. 如果只有一個(gè)元素的張量,使用.item()來(lái)得到python數(shù)據(jù)類型的數(shù)值

x = torch.randn(1)
print(x)
print(x.item())
# tensor([-0.2368])
# -0.23680149018764496

6.numpy和Torch Tensor轉(zhuǎn)換

Torch Tensor與NumPy數(shù)組共享底層內(nèi)存地址,修改一個(gè)會(huì)導(dǎo)致另一個(gè)的變化。
將一個(gè)Torch Tensor轉(zhuǎn)換為NumPy數(shù)組

a = torch.ones(5)
print(a)
# tensor([1., 1., 1., 1., 1.])
b = a.numpy()
print(b)
# [1. 1. 1. 1. 1.]
a.add_(1)
print(a)
print(b)
# tensor([2., 2., 2., 2., 2.])
# [2. 2. 2. 2. 2.]

7. numpy Array轉(zhuǎn)化成Torch tensor

使用from_numpy自動(dòng)轉(zhuǎn)化

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)

8.CUDA張量

所有的 Tensor 類型默認(rèn)都是基于CPU在跳, CharTensor 類型不支持到 NumPy 的轉(zhuǎn)換.
使用.to 方法 可以將Tensor移動(dòng)到任何設(shè)備中

# ``torch.device``將張量移動(dòng)到指定的設(shè)備中
if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA 設(shè)備對(duì)象
    y = torch.ones_like(x, device=device)  # 直接從GPU創(chuàng)建張量
    x = x.to(device)                       # 或者直接使用``.to("cuda")``將張量移動(dòng)到cuda中
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # ``.to`` 也會(huì)對(duì)變量的類型做更改
# tensor([0.7632], device='cuda:0')
# tensor([0.7632], dtype=torch.float64)

9. Tensor基本數(shù)據(jù)類型:

Tensor的基本數(shù)據(jù)類型有五種:

32位浮點(diǎn)型:torch.FloatTensor。 (默認(rèn))
64位整型:torch.LongTensor隐岛。
32位整型:torch.IntTensor。
16位整型:torch.ShortTensor瓷翻。
64位浮點(diǎn)型:torch.DoubleTensor聚凹。
除以上數(shù)字類型外,還有 byte和chart型

一般情況下齐帚,可以使用.cuda方法將tensor移動(dòng)到gpu妒牙,這步操作需要cuda設(shè)備支持
cpu_a = torch.rand(4,3)
cpu_a.type()
使用.cpu方法將tensor移動(dòng)到cpu
cpu_b = gpu_a.cpu()
cpu_b.type()

Tensor初始化方法

##初始化,使用1填充
one = torch.ones(2, 2)
one
##初始化对妄,使用0填充
zero=torch.zeros(2,2)
zero

#初始化一個(gè)單位矩陣湘今,即對(duì)角線為1 其他為0
eye=torch.eye(2,2)
eye
#tensor([[1., 0.],
#        [0., 1.]])

x = torch.randn(3, 3)
print(x)
# tensor([[ 0.6922, -0.4824,  0.8594],
#        [ 0.4509, -0.8155, -0.0368],
#        [ 1.3533,  0.5545, -0.0509]])
# 沿著行取最大值
max_value, max_idx = torch.max(x, dim=1)
print(max_value, max_idx)
# tensor([0.8594, 0.4509, 1.3533]) tensor([2, 0, 0])

# 每行 x 求和
sum_x = torch.sum(x, dim=1)
print(sum_x)
# tensor([ 1.0692, -0.4014,  1.8568])
y=torch.randn(3, 3)
z = x + y
print(z)
# tensor([[-0.3821, -2.6932, -1.3884],
#        [ 0.7468, -0.7697, -0.0883],
#        [ 0.7688, -1.3485,  0.7517]])

# add 完成后x的值改變了
x.add_(y)
print(x)
# tensor([[-0.3821, -2.6932, -1.3884],
#        [ 0.7468, -0.7697, -0.0883],
#        [ 0.7688, -1.3485,  0.7517]])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剪菱,隨后出現(xiàn)的幾起案子摩瞎,更是在濱河造成了極大的恐慌拴签,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旗们,死亡現(xiàn)場(chǎng)離奇詭異蚓哩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)上渴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門岸梨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人稠氮,你說(shuō)我怎么就攤上這事曹阔。” “怎么了隔披?”我有些...
    開(kāi)封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵赃份,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我锹锰,道長(zhǎng)芥炭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任恃慧,我火速辦了婚禮园蝠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痢士。我一直安慰自己彪薛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布怠蹂。 她就那樣靜靜地躺著善延,像睡著了一般。 火紅的嫁衣襯著肌膚如雪城侧。 梳的紋絲不亂的頭發(fā)上易遣,一...
    開(kāi)封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音嫌佑,去河邊找鬼豆茫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛屋摇,可吹牛的內(nèi)容都是我干的揩魂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼炮温,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼火脉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤倦挂,失蹤者是張志新(化名)和其女友劉穎畸颅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妒峦,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡重斑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肯骇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窥浪。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖笛丙,靈堂內(nèi)的尸體忽然破棺而出漾脂,到底是詐尸還是另有隱情,我是刑警寧澤胚鸯,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布骨稿,位于F島的核電站,受9級(jí)特大地震影響姜钳,放射性物質(zhì)發(fā)生泄漏坦冠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一哥桥、第九天 我趴在偏房一處隱蔽的房頂上張望辙浑。 院中可真熱鬧,春花似錦拟糕、人聲如沸判呕。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侠草。三九已至,卻和暖如春犁嗅,著一層夾襖步出監(jiān)牢的瞬間边涕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工褂微, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留功蜓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓蕊梧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腮介。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肥矢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359