pytorch中unsqueeze用法小结

 更新时间:2024年04月17日 11:08:05   作者:ym62033  
unsqueeze()的作用是用来增加给定tensor的维度的,本文主要介绍了pytorch中unsqueeze用法小结,具有一定的参考价值,感兴趣的可以了解一下

在指定的位置插入一个维度,有两个参数,input是输入的tensor,dim是要插到的维度

需要注意的是dim的范围是[-input.dim()-1, input.dim()+1),是一个左闭右开的区间,当dim为负值时,会自动转换为dim = dim+input.dim()+1,类似于使用负数对python列表进行切片。

import torch

a = torch.randn(2,5)
print(a)

print("")
b = a.unsqueeze(0)
print(b.shape)

print("")
c = a.unsqueeze(a.dim())
print(c.shape)


输出:
tensor([[-0.4734,  0.4115, -0.9415, -1.1280, -0.1065],
        [ 0.1613,  1.2594,  1.1261,  1.3881,  0.1112]])

torch.Size([1, 2, 5])

torch.Size([2, 5, 1])

以上是二维数据情况:

首先生成了一个二维矩阵,其大小为[2,5]

然后,在0维度上插入一个维度,可以看到现在新矩阵a的形状变为[1,2,5],第0维度的大小默认是1

最后,在最后一个维度上插入一个维度,形状变为[2, 5, 1]

a=torch.rand(2,3,2)

print("")
print("torch.unsqueeze(a,3) size: {}".format(torch.unsqueeze(a,3).size()))

print("")
print("torch.unsqueeze(a,2) size: {}".format(torch.unsqueeze(a,2).size()))

print("")
print("torch.unsqueeze(a,1) size: {}".format(torch.unsqueeze(a,1).size()))

print("")
print("torch.unsqueeze(a,0) size: {}".format(torch.unsqueeze(a,0).size()))
 
print("")
print("torch.unsqueeze(a,-1) size: {}".format(torch.unsqueeze(a,-1).size()))

print("")
print("torch.unsqueeze(a,-2) size: {}".format(torch.unsqueeze(a,-2).size()))

print("")
print("torch.unsqueeze(a,-3) size: {}".format(torch.unsqueeze(a,-3).size()))

print("")
print("torch.unsqueeze(a,-4) size: {}".format(torch.unsqueeze(a,-4).size()))

输出:
torch.unsqueeze(a,3) size: torch.Size([2, 3, 2, 1])

torch.unsqueeze(a,2) size: torch.Size([2, 3, 1, 2])

torch.unsqueeze(a,1) size: torch.Size([2, 1, 3, 2])

torch.unsqueeze(a,0) size: torch.Size([1, 2, 3, 2])

torch.unsqueeze(a,-1) size: torch.Size([2, 3, 2, 1])

torch.unsqueeze(a,-2) size: torch.Size([2, 3, 1, 2])

torch.unsqueeze(a,-3) size: torch.Size([2, 1, 3, 2])

torch.unsqueeze(a,-4) size: torch.Size([1, 2, 3, 2])

对于三维数据input.dim() = 3,因此dim的范围是[-4, 4)

torch.squeeze() 和 torch.unsqueeze()区别

第一块:

squeeze(),主要是对数据的维度进行压缩,去掉元素数为1的那个维度,使用方式:a.squeeze(N) or torch.squeeze(a,N) ,去掉a的第N维度,以此来实现数据a的维度压缩;

unsqueeze()与squeeze()函数功能相反,其功能是对数据维度进行扩充,使用方式:a.unsqueeze(N) or torch.unsqueeze(a,N),在数据a的第N维度上增加一个维数为1的维度,以此实现对数据的扩充,方便后续模型训练喂入模型的数据的维度和模型接收数据的维度是匹配的。

第二块:

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model.to(device) # 选择第0个cuda

model.to(device)

以上两行代码放在读取数据之前。

mytensor = my_tensor.to(device) #将所有最开始读取数据时的tensor变量copy一份到device所指定的GPU上,之后运算都在指定的GPU上进行。这些tensor多是最开始读取数据时的变量,后面其衍生出的新变量也会在已指定的GPU上运行计算。

第三块:

Tensor & Numpy 都是矩阵,区别在与Tensor可以在GPU上运行,Numpy只能在CPU上运行。(天呐,我现在才知道!)Tensor与Numpy互相转化很方便,类型也比较兼容,Tensor可以直接通过print显示数据类型,而Numpy不可以。

第四块:

x.aadd(y) 实现x与y Tensor的相加,不改变x,返回一个新的Tensor

x.add_(y)  实现x与y Tensor的相加,会修改x的维数

到此这篇关于pytorch中unsqueeze用法小结的文章就介绍到这了,更多相关pytorch unsqueeze内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python单元测试unittest的具体使用示例

    Python单元测试unittest的具体使用示例

    本篇文章主要介绍了Python单元测试unittest,详细的介绍了unittest的概念和简单的使用示例,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • python函数的定义和调用案例讲解

    python函数的定义和调用案例讲解

    函数通常来说就是带名字的代码块,用于完成具体的工作,需要使用的时候调用即可,这不仅提高代码的复用性,而且条理更清晰,函数定义使用def关键字创建函数,下面通过本文给大家讲解python函数的定义和调用,感兴趣的朋友一起看看吧
    2024-06-06
  • Python+ Flask实现Mock Server详情

    Python+ Flask实现Mock Server详情

    这篇文章主要介绍了Python+ Flask实现Mock Server详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 读写json中文ASCII乱码问题的解决方法

    读写json中文ASCII乱码问题的解决方法

    下面小编就为大家带来一篇读写json中文ASCII乱码问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • django中显示字符串的实例方法

    django中显示字符串的实例方法

    在本篇文章里小编给大家整理了一篇关于django中显示字符串的实例方法,有兴趣的朋友们可以跟着学习参考下。
    2021-03-03
  • python logging日志模块的详解

    python logging日志模块的详解

    这篇文章主要介绍了python logging日志模块的详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • 使用Pyinstaller的最新踩坑实战记录

    使用Pyinstaller的最新踩坑实战记录

    这篇文章主要给大家介绍了最近在使用Pyinstaller的踩坑实战记录,主要介绍了PYTHON2X.DLL缺失和WINDOWS2003 32BIT提示程序无效这两个问题的解决方法,文中给出了详细的解决方法,需要的朋友们下面来一起看看吧。
    2017-11-11
  • python 文本单词提取和词频统计的实例

    python 文本单词提取和词频统计的实例

    今天小编就为大家分享一篇python 文本单词提取和词频统计的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 关于PyQt5主窗口图标显示问题汇总

    关于PyQt5主窗口图标显示问题汇总

    这篇文章主要介绍了关于PyQt5主窗口图标显示问题汇总,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Python命名空间的本质和加载顺序

    Python命名空间的本质和加载顺序

    这篇文章主要介绍了Python命名空间的本质和加载顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12

最新评论