PyTorch 中如何改变 Tensor 的形状?

· 约 3 分钟读完 · 第 13 / 125 章

推荐答案

在 PyTorch 中,可以使用以下几种方法来改变 Tensor 的形状:

  1. view() 方法:返回一个具有相同数据但形状不同的新 Tensor。要求新形状的元素总数必须与原 Tensor 相同。

  2. reshape() 方法:与 view() 类似,但 reshape() 可以处理不连续的 Tensor,并且返回的 Tensor 可能是原 Tensor 的副本。

  3. resize_() 方法:原地修改 Tensor 的形状,可能会改变 Tensor 的大小。如果新形状的元素总数与原 Tensor 不同,Tensor 的内容可能会被截断或填充。

  4. unsqueeze() 和 squeeze() 方法:unsqueeze() 在指定维度上增加一个大小为 1 的维度,squeeze() 则移除所有大小为 1 的维度。

本题详细解读

view() 方法

  • 功能:view() 方法返回一个具有相同数据但形状不同的新 Tensor。它要求新形状的元素总数必须与原 Tensor 相同。
  • 使用场景:当你需要改变 Tensor 的形状,并且确保数据是连续的时候,可以使用 view()。
  • 注意事项:如果 Tensor 不是连续的,view() 会抛出错误。此时可以使用 reshape()。

reshape() 方法

  • 功能:reshape() 方法也返回一个具有相同数据但形状不同的新 Tensor。与 view() 不同的是,reshape() 可以处理不连续的 Tensor。
  • 使用场景:当你需要改变 Tensor 的形状,并且不确定 Tensor 是否是连续的时候,可以使用 reshape()。
  • 注意事项:reshape() 可能会返回原 Tensor 的副本,因此可能会增加内存开销。

resize_() 方法

  • 功能:resize_() 方法原地修改 Tensor 的形状,可能会改变 Tensor 的大小。如果新形状的元素总数与原 Tensor 不同,Tensor 的内容可能会被截断或填充。
  • 使用场景:当你需要原地修改 Tensor 的形状时,可以使用 resize_()。
  • 注意事项:resize_() 会直接修改原 Tensor,因此需要谨慎使用。

unsqueeze() 和 squeeze() 方法

  • 功能:unsqueeze() 在指定维度上增加一个大小为 1 的维度,squeeze() 则移除所有大小为 1 的维度。
  • 使用场景:当你需要在特定维度上增加或减少维度时,可以使用 unsqueeze() 和 squeeze()。
  • 注意事项:unsqueeze() 和 squeeze() 不会改变 Tensor 的数据,只会改变其形状。

通过以上方法,你可以灵活地改变 PyTorch Tensor 的形状,以适应不同的计算需求。