Tensor 概念
張量的數學概念:
張量是一個多維數組,它是標量、向量、矩陣的高位擴展
張量在pytorch中的概念:
tensor之前是和pytorch早期版本中的variable一起使用的。
variable是torch.autograd的數據類型,主要用於封裝tensor,進行自動求導
data:被包裝的Tensor
grad:data的梯度
grad_fn:創建Tensor的function,是自動求導的關鍵
requires_grad:指示是否需要梯度
is_leaf:指示是否是葉子結點(張量)
而從pytorch 0.4.0版本開始,variable並入了Tensor,並添加了額外三個屬性:
dtype:張量的數據類型,如torch.FloatTensor,torch.cuda.FloatTensor
shape:張量的形狀,如(64,3,224,224)
device:張量所在設備,CPU/GPU,是加速的關鍵
pytorch的八個屬性中,前四個和數據相關,后四個與梯度求導有關
pytorch的數據類型有包括以下幾種的16種類型,最常用的為畫紅框的兩種,第二個會在計算交叉熵的時候用到
張量的創建
方式一:直接創建
1.1 torch.tensor()
功能:從data創建tensor
data:數據,可以是list,numpy
dtype:數據類型,默認與data的一致
device:所在設備,cuda/cpu
requires_grad:是否需要梯度
pin_memory:是否存於鎖頁內存
1.2 torch.from_numpy(ndarray)
功能:從numpy創建tensor
注意事項:從torch.from_numpy創建的tensor於ndarray共享內存,當修改其中一個的數據,另外一個也將會被改動
方式二:依據數值創建
2.1 torch.zeros()
功能:依size創建全0張量
size:張量的形狀,如(3,3)、(3,224,224)
out:輸出的張量(可以賦給另一個張量值)
layout:內存中布局形式,有strided,sparse_coo(創建稀疏張量時才用到)等
device:所在設備,cuda/cpu
requires_grad:是否需要梯度
2.2 torch.zeros_like()
功能:依input形狀創建全0張量
input:創建與input同形狀的全0張量
dtype:數據類型
layout:內存中布局形式
device:所在設備,cuda/cpu
requires_grad:是否需要梯度
2.3 torch.ones()
功能:依size創建全1張量
其他參數與上述的全0張量創建類似
2.4 torch.ones_like()
功能:依input形狀創建全1張量
同理類似
2.5 torch.full()
功能:依size創建各元素值相同的張量
主要參數:
size:張量的形狀,如(3,3)
fill_value:張量的值
2.6 torch.full_like()
功能:依input形狀創建各元素值相同的張量
同理類似
2.7 torch.arange() (注意只有一個r字母)
功能:創建等差的一維張量
注意事項:數值區間為[start,end)
start:數列起始值
end:數列“結束值”(取不到)
step:數列公差,默認為1
2.8 torch.linspace()
功能:創建均分的一維張量
注意事項:數值區間為[start,end]
start:數列起始值
end:數列結束值(取的到)
steps:數列長度
2.9 torch.logspace()
功能:創建對數均分的一維張量
注意事項:數值區間為[start,end]
start:數列起始值
end:數列結束值
steps:數列長度
base:對數函數的底,默認為10
2.10 torch.eye()
功能:創建單位對角矩陣(二維張量)
注意事項:默認為方陣
n:矩陣行數
m:矩陣列數
方式三:依概率分布創建
3.1 torch.normal()
功能:生成正態分布(高斯分布)的采樣值
mean:均值
std:方差
當mean和std為標量或張量時,各有不同的情況
mean為標量, std為標量:需額外指定一個size,根據size數采樣兩個參數指定的正態分布數
mean為標量, std為張量 或 mean為張量, std為標量:為標量的參數分別都分配到張量參數的元素中形成各自的正態分布並給出采樣值
mean為張量, std為張量:
此時兩個參數張量長度應相等,各生成下標相同對應的正態分布采樣數組
3.2 torch.randn()
3.3 torch.randn_like()
功能:生成標准正態分布
size:張量的形狀
3.4 torch.rand()
3.5 torch.rand_like()
功能:在區間[0,1)上,生成均勻分布
3.6 torch.randint()
3.7 torch.randint_like()
功能:在區間[low,high)上,生成整數均勻分布
size:張量的形狀
3.8 torch.randperm()
功能:生成從0到n-1的隨機排列
n:張量的長度
3.9 torch.bernoulli()
功能:以input為概率,生成伯努利分布(0-1分布,兩點分布)
input:概率值