pytorch

2使用torch.xx_like()创建张量
        torch.ones_like(X), torch.zeros_like(X), torch.rand_like(X)可以分别用于创建一个与张量X具有相同维度的全1、全0或者是服从[0,1]区间上均匀分布的张量。
3、随机数生成张量
    torch.normal(mean, std)可以通过传入指定的均值张量和标准差张量,从而生成一个对应满足该分布的随机数张量,当mean和std传入多个值时,则会相应得到多个随机数张量。均值和方差向量的维度需要满足广播机制。 torch.rand(shape), torch.randn(shape)则是用于生成服从[0,1]区间上均匀分布的张量以及服从标准正态分布的张量。
4、按照数值内容创建张量

    torch.zeros(shape),torch.ones(shape),torch.eye(shape),torch.full(shape, fill_value),torch.empty(shape)可以通过指定shape来创建一个全0、全1、全为fill_value或是完全随机的一个张量。

import torch
import torch
print("全0张量:",torch.zeros(5,2))
print("全1张量:",torch.ones(5,2))
print("对角线全1,其余部分全0张量:",torch.eye(5,5))
print("5行2列全为3的张量:",torch.full((5,2),3))
print("完全随机任意数据类型的张量:",torch.empty(5,3))

**********************************************
全0张量: tensor([
        [0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.],
        [0., 0.]])
全1张量: tensor([    
        [1., 1.],
        [1., 1.],
        [1., 1.],
        [1., 1.],
        [1., 1.]])
对角线全1,其余部分全0张量: tensor([
        [1., 0., 0., 0., 0.],
        [0., 1., 0., 0., 0.],
        [0., 0., 1., 0., 0.],
        [0., 0., 0., 1., 0.],
        [0., 0., 0., 0., 1.]])
5行2列全为3的张量: tensor([[3, 3],
        [3, 3],
        [3, 3],
        [3, 3],
        [3, 3]])
完全随机任意数据类型的张量: tensor(
        [9.9184e-39, 1.0561e-38, 7.3470e-39],
        [1.0653e-38, 1.0194e-38, 4.6838e-39],
        [8.4489e-39, 9.6429e-39, 8.4490e-39],
        [9.6429e-39, 9.2755e-39, 1.0286e-38],
        [9.0919e-39, 8.9082e-39, 9.2755e-39]])
5、按照某种规则生成张量

    torch.arange(start, end, step), torch.linspace(start, end, step), torch.logspace(start, end, step)可以通过指定start,end以及step参数来在某个范围内基于固定步长、等长间隔或对数间隔的张量。

print("初始值为0,终止值为5,步长为1的的张量:",torch.arange(5))
print("初始值为2,终止值为20,步长为3的的张量:",torch.arange(2,20,3))
print("在区间2和17上均匀间隔的5个点的张量:",torch.linspace(2,17,5))
print("对数均分的 1 维张量:",torch.logspace(0,3,4))
print("对数均分的 1 维张量:",torch.logspace(2,10,5))  # 对数底默认为102

**************************************************

初始值为0,终止值为5,步长为1的的张量: tensor([0, 1, 2, 3, 4])
初始值为2,终止值为20,步长为3的的张量: tensor([ 2,  5,  8, 11, 14, 17])
在区间2和17上均匀间隔的5个点的张量: tensor([ 2.0000,  5.7500,  9.5000, 13.2500, 17.0000])
对数均分的 1 维张量: tensor([   1.,   10.,  100., 1000.])
对数均分的 1 维张量: tensor([1.0000e+02, 1.0000e+04, 1.0000e+06, 1.0000e+08, 1.0000e+10])
一般常用的就是32位浮点型,而且只有浮点型才可以计算梯度。训练用的标签则一般是整型中的32或64位。 我们可以使用tensor.dtype来查看当前tensor的数据类型。

1、改变张量形状

tensor.reshape(shape), torch.reshape(input, shape), tensor.resize_(shape), tensor.view(shape) 可以根据指定的shape对原tensor进行reshape操作。

  1. 在PyTorch中,以“_”结尾的函数操作一般表示原地操作,直接对原tensor进行操作。
  2. torch.reshape和tensor.view都可以用来调整tensor的形状,但view函数要求作用的tensor在内存中连续存储,如果对tensor调用过transpose,permute等操作后就无法直接使用view,而需要使用tensor.contiguous来获得一个连续的copy,而reshape则没有这个要求

2、改变张量维度

  • torch.unsqueeze(tensor, dim)可以在张量的指定维度插入一个新的维度,得到一个新的张量,也可以使用tensor.unsqueeze_(dim)进行原地操作。一般是用于给灰度图扩展维度使用,灰度图倘若使用灰度方式读取的话,最终得到的shape为B, H, W,是不符合PyTorch四个维度的要求的,此时可以使用tensor.unsqueeze_(dim=1)来扩充一个维度,得到的新tensor的shape为B, 1, H, W即可进行后续操作了。
  • torch.squeeze(tensor, dim)功能则正好相反,它可以移除指定或者所有维度大小为1(不指定维度时)的维度,从而得到一个维度减小的新张量,类似的也可以使用tensor.squeeze_(dim)进行原地操作。一般用于全卷积网络做分类时的多余维度压缩用,在使用全卷积网络得到最后分类的时(shape为B, C, H, W, C即为待分类数),此时使用Global Average Pooling对特征图的空间信息进行压缩和进一。
  • 步提取,得到feature map的shape为B, C, 1, 1,此时即可使用tensor.squeeze_()对维度进行压缩,得到shape为B, C的分类向量,即可用于后续loss计算

















全部评论

相关推荐

offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
狠赚笔第一人:学计算机自己不努力怪大环境?我大一就拿到了美团大厂的offer,好好看看自己有没有努力查看图片
点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务