Pytorch系列:Pytorch的簡單操作(二) ---- 張量的創建

一、Tensor概念

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

  • 標量:是一個常數,爲0維張量
  • 向量:是一行或者一列數組成,爲1維張量
  • 矩陣:包含行和列兩個維度。是2維張量。

torch.Tensor包含的屬性:

  1. dtype:張量的數據類型,如torch.FloatTensor
  2. shape:張量的形狀,如(64, 3, 224, 224)
  3. device:張量所在的設備,GPU/CPU
  4. data:被包裝的Tensor
  5. grad:data的梯度
  6. grad_fn:創建Tensor的Function,是自動求導的關鍵
  7. requires_grad:指示是否需要梯度
  8. is_leaf:指示是否是葉子結點

二、Tensor創建:直接創建

1. torch.tensor(data, dtype=None, device=None)

功能:從data創建tensor
參數

  • data:數據,可以是list,numpy
  • dtype:數據類型,默認與data一致
  • device:所在設備,cpu或gpu
  • requires_grad:是否需要梯度
  • pin_memory:是否存於鎖頁內存
import torch
import numpy as np

arr = np.ones((3, 3))
print("arr的數據類型:", arr.dtype)

t = torch.tensor(arr)
print("t的數據類型:", t.dtype)

arr的數據類型: float64
t的數據類型: torch.float64
2. torch.from_numpy(ndarray)

功能: 從numpy創建tensor
參數:

  • ndarray:numpy數據

**注意事項:**用此方法創建的tensor與原ndarray共享內存,當修改其中要給的數據,另外要給也將會被改動。

import torch
import numpy as np

# 創建ndarray數組
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 轉化爲tensor
t = torch.from_numpy(arr)
print("numpy array:", arr)
print('tensor', t)

# 修改arr
arr[0, 0] = 0
print("numpy array:", arr)
print('tensor', t)

numpy array: [[1 2 3]
 [4 5 6]]
tensor tensor([[1, 2, 3],
        [4, 5, 6]], dtype=torch.int32)
numpy array: [[0 2 3]
 [4 5 6]]
tensor tensor([[0, 2, 3],
        [4, 5, 6]], dtype=torch.int32)

三、Tensor創建:依據數值創建

1. torch.zeros()

功能: 依據size創建全0張量
參數:

  • size:張量的形狀
  • out:輸出的張量,將生成的張量複製給其他變量
  • layout:內存中佈局形式
  • device:所在設備
  • requires_grad:是否需要梯度
>>> out_t = torch.tensor([1])
>>> t = torch.zeros((3, 3), out=out_t)
>>> print(t, '\n', out_t)
tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])
 tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])
>>> print(id(t), id(out_t), id(t) == id(out_t))
2873909788608 2873909788608 True
2. torch.zeros_like()

功能: 依input形狀創建全0張量
參數:

  • input:創建與input同形狀的全0張量
  • dtype:數據類型
  • layout:內存中佈局形式
>>> input = torch.tensor((2, 2))
>>> torch.zeros_like(input)
tensor([0, 0])
3. torch.ones()

功能: 創建全爲1的張量
參數:

  • size:張量的形狀
  • out:輸出的張量,將生成的張量複製給其他變量
  • layout:內存中佈局形式
  • device:所在設備
  • requires_grad:是否需要梯度
4. torch.ones_like()

功能: 依input形狀創建全1張量
參數:

  • input:創建與input同形狀的全0張量
  • dtype:數據類型
  • layout:內存中佈局形式
5. torch.full()

功能: 依據fill_value的值,創建形狀爲size的張量。
參數:

  • size:張量的形狀
  • fill_value:張量的值
>>> torch.full((3, 3), 2)
tensor([[2., 2., 2.],
        [2., 2., 2.],
        [2., 2., 2.]])
6. torch.full_like()

功能: 創建值爲fill_value,形狀與input相同的張量
參數:

  • input:張量的形狀
  • fill_value:張量的值
>>> input = torch.zeros((3, 3))
>>> torch.full_like(input, 7)
tensor([[7., 7., 7.],
        [7., 7., 7.],
        [7., 7., 7.]])
7. torch.arange()

功能: 創建等差的1維張量
參數:

  • start:數列起始值
  • end:數列結束值
  • step:數列公差,默認爲1

注意事項: 數列區間爲[start, end)

>>> t = torch.arange(2, 10, 2)
>>> print(t)
tensor([2, 4, 6, 8])
8. torch.linspace()

功能: 創建均分的1維張量
參數:

  • start:數列起始值
  • end:數列結束值
  • step:數列長度

注意事項: 數值區間爲[start, end]

>>> torch.linspace(1, 10, 10)
tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
9. torch.logspace()

功能: 創建對數均分的1維張量
參數:

  • start:數列起始值
  • end:數列結束值
  • step:數列長度
  • base:對數函數的底,默認爲10

注意事項: 長度爲steps,底爲base

>>> torch.logspace(1, 10, 5)
tensor([1.0000e+01, 1.7783e+03, 3.1623e+05, 5.6234e+07, 1.0000e+10])
10. torch.eye()

功能: 創建單位對角矩陣(2維張量)
參數:

  • n:矩陣行數
  • m:矩陣列數

注意事項: 默認爲方陣

>>> torch.eye(4, 4)
tensor([[1., 0., 0., 0.],
        [0., 1., 0., 0.],
        [0., 0., 1., 0.],
        [0., 0., 0., 1.]])

四、Tensor創建:依據概率創建

1. torch.normal()

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

  • mean:均值
  • std:標準差
# mean爲張量,std爲張量
>>> mean = torch.arange(1, 5, dtype=torch.float)
>>> std = torch.arange(1, 5, dtype=torch.float)
>>> t_normal = torch.normal(mean, std)
>>> print("mean:{}\nstd:{}".format(mean, std))
mean:tensor([1., 2., 3., 4.])
std:tensor([1., 2., 3., 4.])
>>> print(t_normal)
tensor([ 0.6897, -0.1125,  1.2535, -1.3677])
2. torch.randn()

功能: 生成標準正態分佈
參數:

  • size:張量的形狀
>>> torch.randn((3, 3))
tensor([[ 1.8161,  0.3164, -0.8697],
        [-0.6198, -0.4942,  0.7151],
        [-2.1771,  1.7853, -0.0611]])
3. torch.rand()

功能: 在區間[0,1)上,生成均勻分佈
參數:

  • size:張量的形狀
>>> torch.rand((2, 2))
tensor([[0.6209, 0.6984],
        [0.7671, 0.7405]])
4. torch.randint()

功能: 在區間[low,high)上,生成整數均勻分佈
參數:

  • size:張量的形狀
>>> torch.randint(1, 10, size=(3, 3))
tensor([[7, 5, 7],
        [4, 1, 1],
        [9, 1, 3]])
5. torch.randperm()

功能: 生成從0–n-1的隨機排列
參數:

  • n:張量的長度
>>> torch.randperm(10)
tensor([3, 8, 9, 1, 7, 2, 4, 0, 5, 6])
6. torch.bernoulli(input)

功能: 以input爲概率,生成伯努利分佈
參數:

  • input:概率值
>>> torch.bernoulli(torch.tensor([0.3]))
tensor([0.])
>>> torch.bernoulli(torch.tensor([0.6]))
tensor([1.])
發佈了101 篇原創文章 · 獲贊 84 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章