pytorch | contiguous() 函数

1. 背景

torch中一些操作会改变原数据,比如:narrow() view() expand() transpose()等操作,在使用transpose()进行转置操作时,pytorch并不会创建新的、转置后的tensor,而是修改了tensor中的一些属性(也就是元数据),使得此时的offset和stride是与转置tensor相对应的。转置的tensor和原tensor的内存是共享的,即改变转置后的tensor, 原先tensor中内容也会改变,而contiguous方法就类似深拷贝,使得上面这些操作不会改变元数据

2. 示例

python 复制代码
x = torch.randn(3, 2)
y = torch.transpose(x, 0, 1)
print("修改前:")
print("x-", x)
print("y-", y)
 
print("\n修改后:")
y[0, 0] = 11
print("x-", x)
print("y-", y)

输出:修改后的 x 会随 y 的改变而改变

修改前:

x- tensor([[-1.2076, -0.5300],

-0.0826, -1.0144\], \[ 1.2097, -1.2360\]\]) y- tensor(\[\[-1.2076, -0.0826, 1.2097\], \[-0.5300, -1.0144, -1.2360\]\])

修改后:

x- tensor([[11.0000, -0.5300],

-0.0826, -1.0144\], \[ 1.2097, -1.2360\]\]) y- tensor(\[\[11.0000, -0.0826, 1.2097\], \[-0.5300, -1.0144, -1.2360\]\])

使用 conguous方法

python 复制代码
import torch
x = torch.randn(3, 2)
y = torch.transpose(x, 0, 1).contiguous()
print("修改前:")
print("x-", x)
print("y-", y)
 
print("\n修改后:")
y[0, 0] = 11
print("x-", x)
print("y-", y)

输出: 可以看到x并没有随y的改变而改变

x- tensor([[ 1.3756, -0.1766],

0.9518, -1.7000\], \[-1.0423, -0.6077\]\]) y- tensor(\[\[ 1.3756, 0.9518, -1.0423\], \[-0.1766, -1.7000, -0.6077\]\])

修改后:

x- tensor([[ 1.3756, -0.1766],

0.9518, -1.7000\], \[-1.0423, -0.6077\]\]) y- tensor(\[\[11.0000, 0.9518, -1.0423\], \[-0.1766, -1.7000, -0.6077\]\])

3. 总结

当调用 contiguous() 时,会强制拷贝一份 tensor,让它的布局和从头创建的一模一样,使得两个 tensor 完全没有联系,类似于深拷贝

相关推荐
初学大模型1 分钟前
使用卷积神经网络(CNN)提取文字特征来辅助大语言模型生成文字
人工智能·机器人
咚咚王者2 分钟前
人工智能之数据分析 Matplotlib:第七章 项目实践
人工智能·数据分析·matplotlib
爱看科技9 分钟前
微美全息(NASDAQ:WIMI)双判别器架构:量子生成对抗网络训练的革命性跨越
人工智能·生成对抗网络·量子计算
未来之窗软件服务10 分钟前
操作系统应用(三十二)python版本选择系统—东方仙盟筑基期
开发语言·python·东方仙盟·操作系统应用
Ustinian_31014 分钟前
【python】图片转PDF工具【附完整源码】
开发语言·python·pdf
ziwu15 分钟前
【花朵识别系统】Python+TensorFlow+Django+人工智能+深度学习+卷积神经网络算法
人工智能·深度学习·图像识别
棒棒的皮皮16 分钟前
【OpenCV】Python图像处理之读取与保存
图像处理·python·opencv
Wise玩转AI17 分钟前
医院智能体系统实战:基于 autogen 0.7 + DeepSeek 的多阶段工程落地(一)项目总览
人工智能·chatgpt·ai智能体·autogen
杭州泽沃电子科技有限公司23 分钟前
煤化工合成环节的监测:智能系统如何保障核心装置安全稳定运行?
运维·人工智能·科技·智能监测·煤化工
努力进修23 分钟前
视界重塑:基于Rokid AI眼镜的沉浸式视力康复训练系统设计与实现
人工智能·医疗健康·rokidsdk·ar开发·视力康复