首页 > 其他分享 >Tensor概念和创建

Tensor概念和创建

时间:2022-12-07 19:44:27浏览次数:28  
标签:Tensor 创建 torch 张量 概念 flag print mean

Tensor的概念

张量是一个多维数组,它是标量、向量、矩阵的高维拓展。
image.png


Tensor与Variable

Variable是torch.autograd中的数据类型
主要用于封装Tensor,进行自动求导

  • data: 被包装的Tensor
  • grad: data的梯度
  • grad_fn: 创建Tensor的Function,是自动求导的关键
  • requires_grad: 指示是否需要梯度
  • is_leaf: 指示是否是叶子结点(张量)

image.png
PyTorch0.4.0版开始,Variable并入Tensor

  • dtype: 张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
  • shape: 张量的形状,如(64,3,224,224)
  • device:张量所在设备,GPU/CPU,是加速的关键

Tensor创建

直接创建

torch.tensor

torch.tensor()
功能:从data创建tensor

  • data: 数据,可以是list,numpy
  • dtype: 数据类型,默认与data的一致
  • device: 所在设备,cuda/cpu
  • requires_grad:是否需要梯度
  • pin_memory:是否存于锁页内存

image.png

import torch
import numpy as np
torch.manual_seed(1)

# ===============================  exmaple 1 ===============================
# 通过torch.tensor创建张量
#
# flag = True
flag = False
if flag:
    arr = np.ones((3, 3))
    print("ndarray的数据类型:", arr.dtype)

    t = torch.tensor(arr, device='cuda')
    # t = torch.tensor(arr)

    print(t)

torch.from_numpy

torch.from_numpy(ndarray)
功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor与原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动
image.png

# 通过torch.from_numpy创建张量
# flag = True
flag = False
if flag:
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    t = torch.from_numpy(arr)
    # print("numpy array: ", arr)
    # print("tensor : ", t)

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

    print("\n修改tensor")
    t[0, 0] = -1
    print("numpy array: ", arr)
    print("tensor : ", t)

依据数值创建

torch.zeros

torch.zeros()
功能:依size创建全0张量

  • size: 张量的形状,如(3,3)、(3,224,224)
  • out: 输出的张量
  • layout: 内存中布局形式,有strided,sparse_coo等
  • device: 所在设备,gpu/cpu
  • requires_grad:是否需要梯度

image.png

# 通过torch.zeros创建张量
# flag = True
flag = False
if flag:
    out_t = torch.tensor([1])

    t = torch.zeros((3, 3), out=out_t)

    print(t, '\n', out_t)
    print(id(t), id(out_t), id(t) == id(out_t))

torch.zeros_like

torch.zeros_like()
功能:依input形状创建全0张量

  • intput: 创建与input同形状的全0张量
  • dtype: 数据类型
  • layout: 内存中布局形式

image.png

torch.ones和torch.ones_like

torch.ones()
torch.ones_like()
功能:依input形状创建全1张量

  • size: 张量的形状,如(3,3)、(3,224,224)
  • dtype: 数据类型
  • layout: 内存中布局形式
  • device: 所在设备,gpu/cpu
  • requires_grad: 是否需要梯度

image.png

torch.full与torch.full_like

torch.full()
torch.full_like()
功能:依input形状创建指定数据的张量

  • size: 张量的形状,如(3,3)
  • fill_value: 张量的值

image.png

# 通过torch.full创建全1张量
# flag = True
flag = False
if flag:
    t = torch.full((3, 3), 1)
    print(t)

torch.arange

torch.arange()
功能:创建等差的1维张量注意事项:数值区间为[start,end)

  • start: 数列起始值
  • end: 数列“结束值”
  • step: 数列公差,默认为1

image.png

# 通过torch.arange创建等差数列张量
# flag = True
flag = False
if flag:
    t = torch.arange(2, 10, 2)
    print(t)

torch.linspace

torch.linspace()
功能:创建均分的1维张量注意事项:数值区间为[start,end]

  • start: 数列起始值
  • end: 数列结束值
  • steps: 数列长度

image.png

# 通过torch.linspace创建均分数列张量
# flag = True
flag = False
if flag:
    # t = torch.linspace(2, 10, 5)
    t = torch.linspace(2, 10, 6)
    print(t)

torch.logspace

torch.logspace()
功能:创建对数均分的1维张量注意事项:长度为steps,底为base

  • start: 数列起始值
  • end: 数列结束值
  • steps: 数列长度
  • base: 对数函数的底,默认为10

image.png

torch.eye

torch.eye()
功能:创建单位对角矩阵(2维张量)注意事项:默认为方阵

  • n: 矩阵行数
  • m: 矩阵列数

image.png

依据概率创建

torch.normal

torch.normal()
功能:生成正态分布(高斯分布)

  • mean: 均值
  • std: 标准差

四种模式:

  • mean为标量,std为标量
  • mean为标量, std为张量
  • mean为张量,std为标量
  • mean为张量,std为张量

image.pngimage.png

# 通过torch.normal创建正态分布张量
flag = True
# flag = False
if flag:

    # 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))
    # print(t_normal)

    # mean:标量 std: 标量
    # t_normal = torch.normal(0., 1., size=(4,))
    # print(t_normal)

    # mean:张量 std: 标量
    mean = torch.arange(1, 5, dtype=torch.float)
    std = 1
    t_normal = torch.normal(mean, std)
    print("mean:{}\nstd:{}".format(mean, std))
    print(t_normal)

torch.randn

torch.randn()
torch.randn_like()
功能:生成标准正态分布

  • size: 张量的形状

image.png

torch.rand和torch.randint

torch.rand()
torch.rand_like()
功能:在区间[0,1)上,生成均匀分布torch.randint()
torch.randint_like()功能:区间[low,high)生成整数均匀分布

  • size:张量的形状

image.png

torch.randperm和torch.bernoulli

torch.randperm()
功能:生成生成从0到n-1的随机排列

  • n:张量的长度3.9

torch.bernoulli()
功能:以input为概率,生成伯努力分布(0-1分布,两点分布)

  • input:概率值

image.png

标签:Tensor,创建,torch,张量,概念,flag,print,mean
From: https://www.cnblogs.com/rainbow-yh/p/16962850.html

相关文章