【Pytorch】Tensor.contiguous()使用与理解

本文详细介绍了PyTorch中张量的contiguous()函数,该函数用于确保张量在内存中是连续的。通过举例说明了transpose()等操作如何影响张量的连续性,并通过代码展示了contiguous()如何断开张量间的联系并创建新的内存空间。理解这一概念对于优化PyTorch模型的内存使用和计算效率至关重要。
摘要由CSDN通过智能技术生成

官方文档地址:https://pytorch.org/docs/stable/generated/torch.Tensor.contiguous.html?highlight=torch%20contiguous#torch.Tensor.contiguous

形式:Tensor.contiguous(memory_format=torch.contiguous_format) → Tensor

作用:返回一个连续的内存张量,其中包含与自张量相同的数据。如果 self tensor 已经是指定的内存格式,则此函数返回 self tensor。

参数:memory_format (torch.memory_format, optional)返回的张量所需的内存格式。默认值:torch.contiguous_format。

理解:
这涉及到pytorch对张量的描述与存储之间的关系。一些tensor操作,不会改变tensor内容本身,而是重新定义下标与元素之间的对应关系。下标与元素之间的对应关系就是元数据。例如会改元数据的有:

  • transpose()
  • view()

transpose()为例,其作用是对tensor进行转置操作,该操作执行后并不会生成新的tensor。如下代码,经过transpose操作之后,改变了b,a也随着变化。

import torch

a = torch.randn(2, 3)
b = a.transpose(0, 1)
print("before modify")
print('a:', a)
print('b:', b)
b[1, 1] = 5
print("end modify")
print('a:', a)
print('b:', b)

输出结果如下:

before modify
a: tensor([[-1.0912, -0.0348, -0.8400],
        [-0.2839,  0.0912, -1.3085]])
b: tensor([[-1.0912, -0.2839],
        [-0.0348,  0.0912],
        [-0.8400, -1.3085]])
end modify
a: tensor([[-1.0912, -0.0348, -0.8400],
        [-0.2839,  5.0000, -1.3085]])
b: tensor([[-1.0912, -0.2839],
        [-0.0348,  5.0000],
        [-0.8400, -1.3085]])

那么这时,我们就认为a是contiguous的,b就不是了。当然我们也可以使用如下函数查看:

print(a.is_contiguous())  # True
print(b.is_contiguous())  # False

那么使用contiguous()的作用就是:断开这两个张量之间的联系,新的张量在内存中开辟新的内存空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智绘山河

你的鼓励可能解决你下一个问题

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值