PyTorch 笔记(02)— 常用创建 Tensor 方法(torch.Tensor、ones、zeros、eye、arange、linspace、rand、randn、new)
1. Tensor 概念分類
PyTorch 中的張量(Tensor)類似 NumPy 中的 ndarrays,之所以稱之為 Tensor 的另一個(gè)原因是它可以運(yùn)行在 GPU 中,以加速運(yùn)算。
1.1 從接口的角度分類
對(duì) Tensor 的操作可分為以下兩類:
torch.function,如torch.save等;tensor.function,如tensor.view等;
為方便使用,對(duì) Tensor 的大部分操作同時(shí)支持這兩種接口,比如 torch.sum(a, b) 和 a.sum(b) 功能是等價(jià)的。
1.2 從存儲(chǔ)的角度分類
對(duì) Tensor 的操作又可分為以下兩類:
- 不會(huì)修改自身的數(shù)據(jù),如
a.add(b),加法結(jié)果會(huì)返回一個(gè)新的tensor; - 會(huì)修改自身的數(shù)據(jù),如
a.add_(b),加法結(jié)果仍儲(chǔ)存在a中,但是a已經(jīng)被修改了;
注意:函數(shù)名以 _ 結(jié)尾的都是 inplace 方式,即會(huì)修改調(diào)用者自己的數(shù)據(jù)。
2. Tensor 創(chuàng)建方法
PyTorch 中的 Tensor 也有自己的數(shù)據(jù)類型定義方式,常用的如下。
2.1 torch.Tensor
需要注意的是,使用 torch.Tensor(*sizes) 創(chuàng)建 Tensor 時(shí),系統(tǒng)不會(huì)立即分配空間,只會(huì)計(jì)算當(dāng)前內(nèi)容空間是否夠用,使用到 Tensor 時(shí)才會(huì)分配,而其它操作都會(huì)在創(chuàng)建完成后立即進(jìn)行空間分配。
用于創(chuàng)建一個(gè) Tensor ,即可接受 list 作為參數(shù),也可以接受指定形狀作為參數(shù),還能傳入其它的 tensor 。
Tensor接受形狀參數(shù),創(chuàng)建一個(gè) 2*3 的Tensor
In [1]: import torch as t In [2]: a = t.Tensor(2,3) In [3]: a
Out[3]:
tensor([[2.6380e+23, 1.3070e-14, 4.4721e+21],[6.8233e+22, 3.0217e+32, 4.6161e+24]])In [4]: a.type()
Out[4]: 'torch.FloatTensor'
- 將列表轉(zhuǎn)換為
Tensor
In [5]: b = t.Tensor([[1,2], [3,4]]) In [6]: b
Out[6]:
tensor([[1., 2.],[3., 4.]])In [7]: b.type()
Out[7]: 'torch.FloatTensor'
Tensor轉(zhuǎn)換為list
In [5]: b = t.Tensor([[1,2], [3,4]]) In [6]: b
Out[6]:
tensor([[1., 2.],[3., 4.]])In [7]: b.type()
Out[7]: 'torch.FloatTensor'In [8]: b.tolist()
Out[8]: [[1.0, 2.0], [3.0, 4.0]]In [9]: type(b.tolist())
Out[9]: list
- 創(chuàng)建一個(gè)元素為 2 和 3 的
Tensor
In [10]: c = t.Tensor((2,3)) In [11]: c
Out[11]: tensor([2., 3.])In [12]: c.type()
Out[12]: 'torch.FloatTensor'
2.2 torch.ones
用于生成數(shù)據(jù)類型為浮點(diǎn)型且維度指定的 Tensor,不過(guò)這個(gè)浮點(diǎn)型的 Tensor中的元素值全部為 1,dtype 參數(shù)可以指定其數(shù)據(jù)類型。
In [1]: import torch as t In [2]: t.ones(2,3)
Out[2]:
tensor([[1., 1., 1.],[1., 1., 1.]])In [3]: t.ones(2,3, dtype=t.int)
Out[3]:
tensor([[1, 1, 1],[1, 1, 1]], dtype=torch.int32)In [4]:
2.3 torch.zeros
用于生成數(shù)據(jù)類型為浮點(diǎn)型且維度指定的 Tensor,不過(guò)這個(gè)浮點(diǎn)型的 Tensor中的元素值全部為 0,dtype 參數(shù)可以指定其數(shù)據(jù)類型。
import torcha = torch.zeros(2, 3, dtype=torch.int8)
print a
輸出結(jié)果:
tensor([[0, 0, 0],[0, 0, 0]], dtype=torch.int8)
2.4 torch.eye
用于生成數(shù)據(jù)類型為浮點(diǎn)型且維度指定的 Tensor,不過(guò)這個(gè)浮點(diǎn)型的 Tensor中對(duì)角線元素均為 1 ,dtype 參數(shù)可以指定其數(shù)據(jù)類型。
In [5]: t.eye(3,3)
Out[5]:
tensor([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])In [6]:
2.5 torch.arange
用于生成數(shù)據(jù)類型為浮點(diǎn)型且自定義起始范圍和結(jié)束范圍的 Tensor,所以傳遞給 torch.linspace 的參數(shù)有三個(gè),分別是范圍的起始值、范圍的結(jié)束值和步長(zhǎng),其中,步長(zhǎng)用于指定從起始值到結(jié)束值的每步的數(shù)據(jù)間隔。
import torcha = torch.arange(1, 10, 2)
輸出結(jié)果:
tensor([1, 3, 5, 7, 9])
2.6 torch.linspace
用于生成數(shù)據(jù)類型為長(zhǎng)整型且自定義起始范圍和結(jié)束范圍的 Tensor,所以傳遞給 torch.arange 的參數(shù)有三個(gè),分別是范圍的起始值、范圍的結(jié)束值和均勻分成的份數(shù),其中,份數(shù)用于將起始值和結(jié)束值劃分為幾份。
In [7]: t.linspace(1, 10, 5)
Out[7]: tensor([ 1.0000, 3.2500, 5.5000, 7.7500, 10.0000])In [8]: t.linspace(1, 11, 5)
Out[8]: tensor([ 1.0000, 3.5000, 6.0000, 8.5000, 11.0000])In [9]:
2.7 torch.rand
用于生成數(shù)據(jù)類型為浮點(diǎn)型且維度指定的隨機(jī) Tensor,和在 NumPy 中使用 numpy.rand 生成隨機(jī)數(shù)的方法類似,隨機(jī)生成的浮點(diǎn)數(shù)據(jù)在 0~1 區(qū)間均勻分布。
import torcha = torch.rand(2, 3)
輸出結(jié)果:
tensor([[0.6882, 0.4118, 0.2646],[0.0583, 0.2187, 0.8093]])
2.8 torch.randn
用于生成數(shù)據(jù)類型為浮點(diǎn)型且維度指定的隨機(jī) Tensor,和在 NumPy 中使用 numpy.randn 生成隨機(jī)數(shù)的方法類似,隨機(jī)生成的浮點(diǎn)數(shù)的取值滿足均值為 0、方差為 1 的正態(tài)分布。
import torcha = torch.randn(2, 3)
輸出結(jié)果:
tensor([[ 0.2214, -0.0139, -0.0720],[ 0.2548, -1.3364, 0.3924]])
2.9 torch.new
Tensor 還有一個(gè) new 方法,用法與 t.Tensor 一樣, 會(huì)調(diào)用該 Tensor 對(duì)應(yīng)類型的構(gòu)造函數(shù),生成與當(dāng)前 tensor 類型一致的 tensor。
In [126]: a = t.Tensor(2,3) In [127]: a
Out[127]:
tensor([[ 1.8829e+26, 4.5702e-41, -2.4199e-18],[-1.1804e+24, 2.3408e+26, 4.5702e-41]])In [128]: a.new(2,3)
Out[128]:
tensor([[-7.1914e+16, 4.5702e-41, 3.3177e+05],[ 0.0000e+00, 2.3408e+26, 4.5702e-41]])In [129]: a.new(3,4)
Out[129]:
tensor([[-7.1914e+16, 4.5702e-41, 3.4704e+05, 0.0000e+00],[-7.1913e+16, 4.5702e-41, -7.1913e+16, 4.5702e-41],[-7.6770e+16, 4.5702e-41, -7.6770e+16, 4.5702e-41]])In [130]: a.new(3,4).type()
Out[130]: 'torch.FloatTensor'In [131]:
總結(jié)
以上是生活随笔為你收集整理的PyTorch 笔记(02)— 常用创建 Tensor 方法(torch.Tensor、ones、zeros、eye、arange、linspace、rand、randn、new)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如初的下一句是什么啊?
- 下一篇: PyTorch 笔记(03)— Tens