PyTorch中,view, reshape, 或者 permute 的区别和联系

在 PyTorch 中,view、reshape 和 permute 都是用于改变张量形状的方法,但它们的工作方式和使用场景略有不同。以下是它们的区别和联系:

1. view

  • 功能:view 函数用于改变张量的形状,返回的是一个新张量,它与原始张量共享数据内存(相当于浅拷贝)。
  • 要求:view 只能在张量是连续的(contiguous)的情况下使用。如果张量在内存中不是连续存储的(例如经过 transpose 或 permute 操作),你需要先调用 .contiguous() 方法。
  • 使用场景:适用于需要重新安排张量形状时使用,通常用于深度学习模型中的数据变换,如展平或调整维度顺序。

2. reshape

  • 功能:reshape 也是用于改变张量的形状。与 view 类似,返回的张量与原始张量共享数据内存。但与 view 不同的是,reshape 可以处理不连续的张量(会自动尝试使张量变成连续的)。
  • 要求:不强制要求张量是连续的,它会在内部处理非连续的情况,使得使用更加灵活。
  • 使用场景:适合于与 view 相似的场景,但更灵活,可以处理非连续的张量。

3. permute

  • 功能:permute 用于对张量的维度进行重新排列,而不改变张量的数据。在内存中是对维度的索引重新排序,因此与 view 和 reshape 的操作本质不同。
  • 要求:permute 直接对维度顺序进行调整,不改变维度的大小,只改变维度的位置。
  • 使用场景:适合需要调整维度顺序的场合,比如将 (batch, channels, height, width) 变为 (batch, height, width, channels),在处理图像和多维张量时常用。

总结

简单来说,view和reshape都是用来改变张量的形状的,view更快但要求连续存储,而reshape慢一点不要求连续,灵活度高;而permute是用来调整tensor的维度的顺序的,不改变形状大小。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不是吧这都有重名

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值