PyTorch 中 view 和 reshape 的区别是什么?

· 约 2 分钟读完 · 第 16 / 125 章

推荐答案

在 PyTorch 中,view 和 reshape 都用于改变张量的形状,但它们的行为有一些关键区别:

  • view:

    • view 返回一个与原始张量共享数据的新张量,但形状不同。
    • 要求原始张量在内存中是连续的(contiguous),否则会抛出错误。
    • 如果张量不连续,需要先调用 contiguous() 方法。
  • reshape:

    • reshape 也返回一个与原始张量共享数据的新张量,但形状不同。
    • 如果原始张量在内存中是连续的,reshape 的行为与 view 相同。
    • 如果原始张量不连续,reshape 会自动处理,返回一个连续的新张量。

本题详细解读

view 的使用场景

  • view 适用于已知张量在内存中是连续的情况。
  • 由于 view 要求张量是连续的,因此在某些情况下需要先调用 contiguous() 方法。

reshape 的使用场景

  • reshape 更加灵活,适用于不确定张量是否连续的情况。
  • 如果张量不连续,reshape 会自动处理,返回一个连续的新张量。

关键区别总结

  • 连续性要求:view 要求张量是连续的,而 reshape 不要求。
  • 自动处理:reshape 在张量不连续时会自动处理,而 view 会抛出错误。
  • 性能:由于 reshape 可能需要复制数据,因此在性能上可能略低于 view。

代码示例对比

在这个示例中,view 会抛出错误,而 reshape 会成功执行。