張量的創建
張量
張量的定義
張量是一個多維數組,它是標量、向量、矩陣的高維拓展。
特殊的張量:
- 標量——0維張量
- 向量——1維張量
- 矩陣——2維張量
Tensor與Variable
Variable是torch.autograd中的數據類型主要用於封裝Tensor,進行自動求導。
Variable的屬性有:
- data:被包裝的Tensor
- grad:data的梯度
- grad_fn: 創建Tensor的Function,是自動求導的關鍵
- requires_grad:指示是否需要梯度
- is_leaf:指示是否是葉子結點(張量)
Tensor:從PyTorch0.4.0版本開始,Variable併入Tensor中。
Tensor除了擁有Variable的屬性外,還有:
- dtype:張量的數據類型,如torch.FloatTensor,torch.cuda.FloatTensor
- shape:張量的形狀,如:(64,3,224,224)
- device:張量所在設備,GPU/CPU,是借宿的關鍵
張量的創建
1.直接創建
torch.tensor()
torch.tensor(
data,
dtype=None,
device=None,
requires_grad=False,
pin_memory=False
)
功能:從data創建tensor
- data:數據,可以是list,numpy
- dtype:數據類型,默認與data的一致
- device:所在的設備,cuda/cpu
- requires_grad:是否需要梯度
- pin_memory:是否存於鎖業內存
torch.from_numpy(ndarray)
功能:從numpy創建tensor
注意:從torch.from_numpy創建的Tensor與原ndarray共享內存,當修改其中一個數據,另外一個也將會被改動。
2.依據數值創建
torch.zeros()
torch.zeros(
size,
out=None,
dtype=None,
layout=torch,strided
device=None
requires_grad=False)
功能:依size創建全0張量
- size:張量的形狀,如(3,3)、(3,224,224)
- out:輸出的張量
- layout:內存中的佈局形式,有strided,sparse_coo(數據爲稀疏矩陣時才使用)
- device:所在的設備,gpu/cpu
- requires_grad:是否需要梯度
torch.zeros_like()
torch.zeros_like(
input_data,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:依據input_data的形狀創建全0張量
- input_data:創建與input同形狀的全0張量
- dtype:數據類型
- layout:內存中的佈局形式
torch.ones()
功能同torch.zeros,不同之處在於創建的爲全1張量
torch.ones_like()
功能同torch.zeros_like(),不同點在於創建全1張量
torch.full()
torch.full(
size,
fill_value,
out=None,
dtype=None,
layout=torch.strided,
requires_grad=False)
功能:依據size輸入的形狀,創建值全爲fill_value的張量
torch.full_like()
功能與torch.zeros_like類似,填充某個值
torch.arange()
torch.arange(
start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:創建等差的1維張量
注意事項:數值區間爲[start,end)左開右閉
- start:數列起始值
- end:數列結束值(取不到)
- step:數列的公差,默認爲1
torch.linspace()
torch.linspace(
start,
end,
steps=100,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:創建均分的1維張量
注意事項:數值區間爲[start,end] (全部能取到)
- start:數列起始值
- end:數列結束值
- steps:數列長度(數列中元素的個數)
torch.logspace()
torch.logspace(
start,
end,
steps=100,
base=10.0,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:創建對數均分的1維張量
注意事項:長度爲steps,底數爲base
- start:數列起始值
- end:數列結束值
- steps:數列長度(數列中元素的個數)
- base:對數函數的底數,默認值爲10.0
torch.eye()
torch.eye(
n,
m=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:創建單位對角矩陣(2維張量)
注意:默認爲方陣
- n:矩陣行數
- m:矩陣列數
依據概率分佈
torch.normal()
torch.normal(mean,std,out=None)
功能:生成正態分佈(高斯分佈)
- mean:均值
- std:標準差
四種模式:
- mean爲標量,std爲標量
- mean爲標量,std爲張量
- mean爲張量,std爲標量
- mean爲張量,std爲張量
torch.randn()
功能,生成標準正態分佈,大小爲size。功能類似torch.zeros()
torch.randn_like()
功能:生成標準正態分佈,大小爲input_data的size
torch.rand()
torch.rand_like()
在區間[0,1)上生成均勻分佈
torch.randint()
torch.randint(
low=0,
high,
size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
torch.randint_like()
在區間[low,high)生成整數均勻分佈的size大小的張量
size:張量的形狀
torch.randprem()
torch.randperm(
n,
out=None,
dtype=torch.int64,
layout=torch.strided,
device=None,
requires_grad=False)
功能:生成從0到n-1的隨機排列
n:張量的長度
torch.bernoulli()
torch.bernoulli(
input,
*,
generator=None,
out=None)
功能:以input爲概率,生成伯努利分佈