PyTorch入門(二)——張量的創建

張量

張量的定義

張量是一個多維數組,它是標量、向量、矩陣的高維拓展。

特殊的張量:

  1. 標量——0維張量
  2. 向量——1維張量
  3. 矩陣——2維張量

Tensor與Variable

Variable是torch.autograd中的數據類型主要用於封裝Tensor,進行自動求導

Variable的屬性有:

  1. data:被包裝的Tensor
  2. grad:data的梯度
  3. grad_fn: 創建Tensor的Function,是自動求導的關鍵
  4. requires_grad:指示是否需要梯度
  5. is_leaf:指示是否是葉子結點(張量)

Tensor:從PyTorch0.4.0版本開始,Variable併入Tensor中。

Tensor除了擁有Variable的屬性外,還有:

  1. dtype:張量的數據類型,如torch.FloatTensor,torch.cuda.FloatTensor
  2. shape:張量的形狀,如:(64,3,224,224)
  3. device:張量所在設備,GPU/CPU,是借宿的關鍵

張量的創建

1.直接創建

torch.tensor()

torch.tensor(
			data,
			dtype=None,
			device=None,
			requires_grad=False,
			pin_memory=False
			)

功能:從data創建tensor

  1. data:數據,可以是list,numpy
  2. dtype:數據類型,默認與data的一致
  3. device:所在的設備,cuda/cpu
  4. requires_grad:是否需要梯度
  5. 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張量

  1. size:張量的形狀,如(3,3)、(3,224,224)
  2. out:輸出的張量
  3. layout:內存中的佈局形式,有strided,sparse_coo(數據爲稀疏矩陣時才使用)
  4. device:所在的設備,gpu/cpu
  5. requires_grad:是否需要梯度

torch.zeros_like()

torch.zeros_like(
				input_data,
				dtype=None,
				layout=torch.strided,
				device=None,
				requires_grad=False)

功能:依據input_data的形狀創建全0張量

  1. input_data:創建與input同形狀的全0張量
  2. dtype:數據類型
  3. 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)左開右閉

  1. start:數列起始值
  2. end:數列結束值(取不到)
  3. 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] (全部能取到)

  1. start:數列起始值
  2. end:數列結束值
  3. 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

  1. start:數列起始值
  2. end:數列結束值
  3. steps:數列長度(數列中元素的個數)
  4. base:對數函數的底數,默認值爲10.0

torch.eye()

torch.eye(
			n,
			m=None,
			dtype=None,
			layout=torch.strided,
			device=None,
			requires_grad=False)

功能:創建單位對角矩陣(2維張量)
注意:默認爲方陣

  1. n:矩陣行數
  2. m:矩陣列數

依據概率分佈

torch.normal()

torch.normal(mean,std,out=None)

功能:生成正態分佈(高斯分佈)

  1. mean:均值
  2. std:標準差

四種模式:

  1. mean爲標量,std爲標量
  2. mean爲標量,std爲張量
  3. mean爲張量,std爲標量
  4. 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爲概率,生成伯努利分佈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章