张量简介与创建

一、Tensor的概念

          一、张量(Tensor)

                    张量是一个多维数组,它是标量、向量、矩阵的高维扩展

         二、Tensor与Variable

                   torch.autograd.Variable(包含data、grad、grad_fn、requires_grad、is_leaf)

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

            data: 被包装的Tensor

            grad: data的梯度

            grad_fn: 创建Tensor的Function,是自动求导的关键

            requires_grad: 指示是否需要梯度

            is_leaf: 指示是否是叶子节点(张量)

         三、Tensor

            PyTorch0.4.0版开始,Variable并入Tensor

                   dtype: 张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor

                   shape: 张量的形状,如(64,3,224,224)

                   device: 张量所在设备,GPU/CPU,是加速的关键

            torch.Tensor(含有data,dtype,shape,device,requires_grad,grad,grad_fn,is_leaf几个模块)

 

二、Tensor创建一:直接创建

1、torch.tensor()

功能: 从data创建tensor

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

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

example:

import numpy as np
import torch

arr = np.ones((3, 3))
print(arr.dtype)
print(torch.tensor(arr))


2、torch.from_numpy(ndarray)

功能: 从numpy 创建 tensor
注意事项: 从torch.from_numpy 创建的tensor于原ndarray共享内存,当修改其中一个的数据,量竵一个也将会被改动

example:

arr = np.array([[1, 2, 3], [4, 5, 6]])
t = torch.from_numpy(arr)
print(arr)
print(t)

arr[0, 0] = 0
print(arr)
print(t)

arr[0, 0] = -1
print(arr)
print(t)

三、Tensor创建二:  依据数值创建

1、torch.zeros()

功能: 依size创建全0张量

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

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

example:

out_t = torch.zeros((3, 3))
print(out_t)


2、torch.zeros_like()

功能: 依input形状创建全0张量

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

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

3、torch.ones()
4、torch.ones_like()

5、torch.full()

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

6、torch.full_like()

功能: 依input形状创建全0张量
size: 张量的形状,如(3,3)
full_value: 张量的值

7、torch.arange()

功能: 创建等差1维张量 
注意事项: 数值区间[start,end)
start: 数列起始值
end: 数列结束值
step: 数列公差,默认为1

torch.arange(
    start=0,
    end,
    step=1,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)

8、torch.linspace()

功能: 创建均分的1维张量
注意事项: 数值区间[start,end]
start: 数列起始值
end: 数列结束值
steps: 数列长度

torch.linspace(
    start,
    end,
    steps=100,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)


9、torch.logspace()

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

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

torch.logspace(
  start,end,steps=100,base=10,out=None,dtype=None,layout=torch.strided,device=None,requres_grad=False)

10、torch.eye()

功能: 创建单位对角矩阵(2维张量)
注意事项: 默认为方阵
n: 矩阵行数
m: 矩阵列数

四、Tensor创建三:  依据概率创建

1、torch.normal()

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

mean: 均值
std: 均方差

四种模式: 

mean为标量 && std为标量 
mean为标量 && std为张量
mean为张量 && std为标量 
mean为张量 && std为张量


2、torch.randn()

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

3、torch.randn_like()

功能: 生成标准正态分布
size: 张量的形状

4、torch.rand()

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

5、torch.rand_like()

功能: 在区间[0,1)上,生成均匀分布

6、torch.randint()

torch.randint(low=0,
              high,
              size,
              out=None,
              dtype=None,
              layout=torch.strided,
              device=None,
              requires_grad=False)

7、torch.randint_like()

功能: 区间[low,high)生成整数均匀分布
size: 张量的形状

8、torch.randperm()

功能: 生成从0到n-1的随机排列

torch.randperm(n, out=None,
               dtype=torch.int64,
               layout=torch.strided,
               device=None,
               requires_grad=False)


 
9、torch.bernoulli()

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

torch.bernoulli(input,
                *,
                generator=None,
                out=None)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值