pytorch 张量的unfold方法介绍

在 PyTorch 中,unfold 是张量的一种操作方法,用于将张量的一个维度展开为多个重叠的窗口。这在处理滑动窗口操作(如卷积、时间序列分片等)时非常有用。

方法签名

复制代码
Tensor.unfold(dimension, size, step)

参数说明

  • dimension: 要展开的维度索引(从 0 开始)。
  • size: 每个窗口的大小。
  • step: 每个窗口之间的步幅。

返回值

返回一个新的张量,其中指定的维度被替换为一个新的维度,该维度包含了从原始维度中抽取的滑动窗口。

用法示例

示例 1: 基本用法
复制代码
import torch

# 创建一个一维张量
x = torch.arange(10)
print("原始张量:", x)

# 使用 unfold 创建滑动窗口
y = x.unfold(dimension=0, size=3, step=2)
print("展开后的张量:\n", y)

输出

复制代码
原始张量: tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
展开后的张量:
 tensor([[0, 1, 2],
         [2, 3, 4],
         [4, 5, 6],
         [6, 7, 8]])

解释

  • 在第 0 维(行)上展开,窗口大小为 3,步幅为 2。
  • 展开的每个窗口是连续的 3 个元素,相邻窗口之间跳过 2 个元素。
示例 2: 二维张量的展开
复制代码
# 创建一个二维张量
x = torch.arange(1, 17).view(4, 4)
print("原始张量:\n", x)

# 在维度 1 上展开
y = x.unfold(dimension=1, size=2, step=1)
print("展开后的张量:\n", y)

输出

复制代码
原始张量:
 tensor([[ 1,  2,  3,  4],
         [ 5,  6,  7,  8],
         [ 9, 10, 11, 12],
         [13, 14, 15, 16]])
展开后的张量:
 tensor([[[ 1,  2],
          [ 2,  3],
          [ 3,  4]],
         [[ 5,  6],
          [ 6,  7],
          [ 7,  8]],
         [[ 9, 10],
          [10, 11],
          [11, 12]],
         [[13, 14],
          [14, 15],
          [15, 16]]])

解释

  • 在第 1 维(列)上展开,窗口大小为 2,步幅为 1。
  • 每一行的每个窗口是连续的 2 个元素,相邻窗口之间跳过 1 个元素。
示例 3: 高维张量的展开

对于高维张量,unfold 操作也类似,只需指定正确的维度即可。例如:

复制代码
x = torch.randn(2, 3, 4)  # 一个 3 维张量
y = x.unfold(dimension=2, size=2, step=1)
print("高维张量展开后形状:", y.shape)

输出

复制代码
高维张量展开后形状: torch.Size([2, 3, 3, 2])

注意事项

  1. 边界问题:如果剩余的元素不足以填满窗口,则这些元素会被忽略。
  2. 效率unfold 是一个视图操作,不会拷贝数据,但其返回值是一个新的张量,需要额外注意内存管理。

常见应用

  • 图像处理中的滑动窗口操作。
  • 自定义卷积操作或池化操作。
  • 时间序列数据的分片处理。
相关推荐
兵慌码乱8 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
ZhengEnCi8 小时前
09c-斯坦福CS336作业二:系统与分布式训练
人工智能
阿里云大数据AI技术8 小时前
用 SQL 解锁多模态数据分析:Hologres 让图片、语音、视频变成结构化洞察
人工智能
阿里云大数据AI技术9 小时前
EMR Serverless StarRocks 湖仓多模态检索:One SQL on One Data,实现全文 + 标量 + 向量三路混合检索
人工智能
金銀銅鐵9 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
冬奇Lab10 小时前
Skill 系列(02):Skill 安全风险——三类攻击面的实战测试
人工智能·安全·开源
冬奇Lab10 小时前
每日一个开源项目(第138篇):OpenMontage - 把 AI 编程助手变成完整的视频制作团队
人工智能·开源·claude
米小虾10 小时前
智谱港股盘中市值突破万亿港元!GLM-5.2 开源引爆国产 AI 价值重估
人工智能·chatglm (智谱)
阿里云大数据AI技术11 小时前
义乌小商品城基于MaxFrame AI Function的亿级AI 数据产线提速之路
人工智能