天天看點

pytorch中tensor建立方法tensor的建立方法

tensor的建立方法

文章目錄

  • tensor的建立方法
    • 總結
    • 直接建立
      • 使用`torch.tensor()`
    • 從numpy建立tensor
    • 依據數值建立張量
      • **使用`torch.zeros()`**建立全零張量
      • 使用`torch.zeros_like()`
      • 建立全1張量
      • 自定義數值建立張量
      • 建立等差的1維張量
      • 建立均分的1維張量
      • 建立對數均分的1維張量
      • 建立機關對角矩陣( 2維張量)
    • 依據機率分布來建立張量
      • 生成正态分布(高斯分布)
      • 生成标準正态分布
      • 在區間【0, 1)上,生成均勻分布
      • 區間【low, high)生成整數均勻分布
      • 生成生成從0到n-1的随機排列
      • 以input為機率,生成伯努力分布 (0-1分布,兩點分布)

總結

直接建立

code 作用
torch.tensor() 直接建立
torch.from_numpy(ndarray) 從numpy建立tensor

按值建立

code 作用
torch.tensor() 直接建立
torch.from_numpy(ndarray) 從numpy建立tensor
torch.zeros()) 建立全零張量
torch.ones() torch.ones_like() 建立全1張量
torch.full() torch.full_like() 建立全n張量(n為自定義)
torch.arange() 建立等差的1維張量
torch.linspace() 建立均分的1維張量
torch.logspace() 建立對數均分的1維張量
torch.eye() 建立機關對角矩陣( 2維張量)

按機率分布建立

code 作用
torch.normal() 生成正态分布(高斯分布)
torch.randn() torch.randn_like() 生成标準正态分布
torch.rand() torch.rand_like() 在區間【0, 1)上,生成均勻分布
torch.randint () torch.randint_like() 區間【low, high)生成整數均勻分布
torch.randperm() 生成生成從0到n-1的随機排列
torch.bernoulli() 以input為機率,生成伯努力分布 (0-1分布,兩點分布)

直接建立

使用

torch.tensor()

torch.tensor(data,dtype=None,device=None,requires_grad=False,pin_memory=False)
data 資料, 可以是list, numpy
dtype 資料類型,預設與data的一緻
device 所在裝置, cuda/cpu
requires_grad 是否需要梯度
pin_memory 是否存于鎖頁記憶體
  • 需要把張量放在GPU上,可以設定
device = `cuda`
           

從numpy建立tensor

使用

torch.from_numpy(ndarray)

使用torch.from_numpy建立的tensor和原來ndarray共享記憶體

依據數值建立張量

**使用

torch.zeros()

**建立全零張量

torch.zeros(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
參數 作用
size 張量的形狀, 如(3, 3)、(3, 224,224)
out 輸出的張量
layout 記憶體中布局形式, 有 strided,sparse_coo等
device 所在裝置, gpu/cpu
requires_grad 是否需要梯度
  • out參數

    輸入

out_t = torch.tensor([1])
t = torch.zeros((3,3), out=out_t)
           

列印結果

out_t與t是相同的

使用

torch.zeros_like()

依據input的形狀建立全0張量

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

建立全1張量

使用

torch.ones()

使用

torch.ones_like()

torch.ones(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)
torch.ones_like(input,dtype=None,layout=None,device=None,requires_grad=False)
           

自定義數值建立張量

使用

torch.full()

使用

torch.full_like()

torch.full(size,
fill_value,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           

其中fill_value為張量的值

建立等差的1維張量

使用

torch.arange()

torch.arange(start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • start : 數列起始值
  • **end **: 數列“結束值”
  • step: 數列公差,預設為1

建立均分的1維張量

使用

torch.linspace()

torch.arange(start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • start : 數列起始值
  • end : 數列結束值
  • steps: 數列長度

建立對數均分的1維張量

使用

torch.logspace()

torch.logspace(start,
end,
steps=100,
base=10.0,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • start : 數列起始值
  • end : 數列結束值
  • steps: 數列長度
  • base : 對數函數的底,預設為10

建立機關對角矩陣( 2維張量)

使用

torch.eye()

torch.eye(n,
m=None,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • n: 矩陣行數
  • m : 矩陣列數

依據機率分布來建立張量

生成正态分布(高斯分布)

使用

torch.normal()

torch.normal(mean,
std,
out=None)
           
  • mean : 均值(可為标量,也可為張量)
  • std : 标準差(可為标量,也可為張量)

均值和标準差都是張量的時候需要給出size

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

生成标準正态分布

使用

torch.randn()

使用

torch.randn_like()

torch.randn(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • size : 張量的形狀

在區間【0, 1)上,生成均勻分布

使用

torch.rand()

使用

torch.rand_like()

區間【low, high)生成整數均勻分布

使用

torch.randint ()

使用

torch.randint_like()

生成生成從0到n-1的随機排列

使用

torch.randperm()

  • n : 張量的長度

以input為機率,生成伯努力分布 (0-1分布,兩點分布)

使用

torch.bernoulli()

torch.bernoulli(input,
*,
generator=None,
out=None)
           
  • input : 機率值