张量

张量是多维数组,是标量、向量、矩阵的高维拓展

 

数据类型

Pytorch0.4.0之前的张量数据类型:torch.autograd.Variable,

用处:用来封装Tensor,进行自动求导

 

属性:

data-----被包装的Tensor

grad-----data的梯度

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

requires_grad:指示是否需要梯度

Is_leaf:指示是否是叶子结点(张量)

 

========================================================================================================

 

现在的张量数据类型: torch.Tensor

 

属性:data,dtype,shape,device,requires_grad,grad,grad_fn,is_leaf

 

Dtype: 张量数据类型,torch.FloatTensor,torch.cuda.FloatTensor

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

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

 

 

 

 

创建方式Tensor:

 

  1. 直接创建

Torch.tensor(data)

Torch.from_numpy(data)  与data是同一个内存

 

  1. 根据数值创建

  1. Torch.zeros(size,out,layout,device,requires_grad)

    

Out: 输出的张量

layout:内存中的布局形式,如stride,sparese_coo,默认stride

Device:所在设备

 

  1.  Torch.zeros_like(input,dtype,layout)

根据input形状创建全0张量

  1. Torch.ones()
  2. Torch.ones_like()
  3. Torch.full()
  4. Torch.full_like(size,fill_value) , fill_value为张量的值
  5. Torch.arrange(start,end,step)

创建等差的一维张量

start:数列起始值

End:  数列“结束值”

Step: 数列公差,默认为1

  1. Torch.linspace(start,end,steps)

创建均分的一维张量

steps数列长度

 

  1. Torch.logspace(start,end,steps,base)

创建对数均分的1维张量

Base: 对数函数的底,默认为10

  1. Torch.eye(n,m)

创建对角矩阵

n: 行

m: 列

 

  1. 根据概率分布创建张量

    1. Torch.normal()  生成正太分布(即高斯分布)

Mean: 均值(张量\标量)

Std:  方差(张量\标量)

1)张量 + 张量

 

                 依次对应4个不同均值和方差的概率分布的采样

2)标量+标量

 

3)标量 + 张量

 

依次生成4个均值相同,方差不同的概率分布采样

3) 张量+标量

 

依次生成4个均值不同,方差相同的概率分布采样

  1. Torch.randn()

生成标准正态分布的张量

  1. Torch.randn_like()
  2. Torch.rand()生成均匀分布
  3. Torch.rand_like()
  4. Torch.randint()整数均匀分布
  5. Torch.randint_like()
  6. Torch.randperm(n)

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

n:张量长度

  1. Torch.bernoulli()

以input为概率,生成伯努利分布

=================================================================================================================================================================================================

 

 

张量的操作

  1. 张量拼接与切分

    1. Torch.cat(tensor,dim):

 将张量按照维度dim进行拼接

Tensor: 张量序列

Dim: 要拼接的维度

 

 

 

  1. Torch.stack(tensor,dim)

在新创建的维度dim上进行拼接

Tensor: 张量序列

Dim: 要拼接的维度

 

 

 

 

 

  1. Torch.chunk(input,chunks,dim)

将张量按照dim进行平均切分

返回值:张量列表

注意事项:若不能整除,最后一份张量小于其他张量

Chunks: 要切分的份数

Dim: 要切分的维度

 

 

 

 

 

  1. Torch.split(tensor,split_size_or_sections,dim)

将张量按照维度切分

返回值:张量列表

 

Split_size_or_sections: 为int时,是每份的长度;为list时,按list元素切分

 

  1. 张量索引
    1. Torch.index_select(input,dim,index)

在维度dim上,按index索引数据

返回值:index索引数据拼接成的向量

 

Index:要索引数据的序号

 

 

  1. Torch.masked.select(input,mask)

按照mask中的true进行索引,返回一维张量,所有满足mask要求的值

Mask:与input通形状的布尔类型向量

 

 

  1. 张量变换
    1. Torch.reshape(input,shape)

变换张量形状

注意:当张量在内存中是连续的时,新张量与input共享数据内存

Input:要变换的张量

shape:新张量的形状

 

 

  1. Torch.transpose(input,dim0,dim1)

交换张量的两个维度

转置?

 

 

  1. Torch.t()

 二维矩阵的转置,相当于torch.transpose(input,0,1)

 

  1. Torch.squeeze()

压缩(删除)长度为1的轴,把轴内元素合并

Dim: 为None的话压缩所有轴长为1的;若为指定维度,当且仅当该轴长度为1时,可以被移除。

 

 

 

  1. Torch.unsqueeze()

依据dim进行扩展维度,分割出一个维度

 

  1. 张量数学运算

    1. 加减乘除

Torch.add(input,other)  加法

 

Torch.addcdiv(input,tensor1,tensor2,value,out)  加法复合运算

 

Torch.addcmul(): out= input + value*tensor1*tensor2

Torch.sub()  减法

Torch.div()   除法

Torch.mul() 乘法

 

  1. 对数,指数,幂函数

Torch.log() 对数函数

Torch.log10() 以10为底的对数函数

torch.log2() 以2为底的对数函数

Torch.exp() 指数函数

torch.pow(a,b)求幂函数

  1. 三角函数

Torch.abs()

Torch.acos()

Torch.cosh()双曲余弦

torch.cos()

Torch.asin()

Torch.atan()

Torch.atan2()  返回x,y坐标的反正切值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值