【PYG】pytorch中size和shape有什么不同

  • 一般使用tensor.shape打印维度信息,因为简单直接

在 PyTorch 中,sizeshape 都用于获取张量的维度信息,但它们之间有细微的区别。下面是它们的定义和用法:

  1. size

    • size 是一个方法(size())和属性(size),用于返回张量的维度信息。

    • 使用方法 size() 可以选择获取特定维度的大小。

    • 示例:

      python 复制代码
      import torch
      
      tensor = torch.tensor([[1.0, 2.0, 3.0, 4.0],
                             [2.0, 3.0, 4.0, 5.0],
                             [3.0, 4.0, 5.0, 6.0]])
      
      # 使用 size 方法(无参数)
      size_method = tensor.size()
      print(f"使用 size 方法: {size_method}")  # 输出: 使用 size 方法: torch.Size([3, 4])
      
      # 使用 size 方法(带维度参数)
      size_dim1 = tensor.size(1)
      print(f"维度 1 的大小: {size_dim1}")  # 输出: 维度 1 的大小: 4
  2. shape

    • shape 是一个属性,直接返回张量的维度信息,表示为一个 torch.Size 对象。

    • shape 属性不能接受参数,因此不能直接用于获取特定维度的大小。

    • 示例:

      python 复制代码
      import torch
      
      tensor = torch.tensor([[1.0, 2.0, 3.0, 4.0],
                             [2.0, 3.0, 4.0, 5.0],
                             [3.0, 4.0, 5.0, 6.0]])
      
      # 使用 shape 属性
      shape_attr = tensor.shape
      print(f"使用 shape 属性: {shape_attr}")  # 输出: 使用 shape 属性: torch.Size([3, 4])

区别

  • size 方法和属性

    • size 方法可以接受参数,例如 size(dim),用于获取特定维度的大小。
    • size 属性直接返回一个 torch.Size 对象,表示张量的所有维度。
  • shape 属性

    • shape 属性只返回一个 torch.Size 对象,表示张量的所有维度。
    • shape 属性不能直接获取特定维度的大小。

总结

  • size 提供了方法和属性,方法可以接受参数来获取特定维度的大小。

  • shape 仅作为属性,返回整个张量的维度信息,不能接受参数。

  • tensor.size返回<built-in method size of Tensor object at 0x7fee569194a0>

  • tensor.shape返回<class 'torch.Size'>,tensor.size()返回<class 'torch.Size'>

示例对比

python 复制代码
import torch

tensor = torch.tensor([[1.0, 2.0, 3.0, 4.0],
                       [2.0, 3.0, 4.0, 5.0],
                       [3.0, 4.0, 5.0, 6.0]])

# 使用 size 属性
size_attr = tensor.size
print(f"使用 size 属性: {size_attr}")  # 输出: 使用 size 属性: torch.Size([3, 4])

# 使用 size 方法
size_method = tensor.size()
print(f"使用 size 方法: {size_method}")  # 输出: 使用 size 方法: torch.Size([3, 4])

# 使用 size 方法获取特定维度的大小
size_dim1 = tensor.size(1)
print(f"维度 1 的大小: {size_dim1}")  # 输出: 维度 1 的大小: 4

# 使用 shape 属性
shape_attr = tensor.shape
print(f"使用 shape 属性: {shape_attr}")  # 输出: 使用 shape 属性: torch.Size([3, 4])

通过以上示例可以看出,size 方法和属性提供了更灵活的用法,而 shape 属性则是一个简单快捷的方法来获取整个张量的维度信息。


当你直接访问 tensor.size 而不带括号时,你访问的是一个方法对象,而不是调用该方法。要获取张量的尺寸,你需要调用该方法,使用 tensor.size()。让我们通过一些示例来澄清这一点。

示例解释

首先,我们创建一个张量:

python 复制代码
import torch

tensor = torch.tensor([[1.0, 2.0, 3.0],
                       [4.0, 5.0, 6.0]])

获取张量的尺寸

  1. 使用 size() 方法
python 复制代码
size = tensor.size()
print(f"使用 size() 方法: {size}")  # 输出: 使用 size() 方法: torch.Size([2, 3])
  1. 直接访问 size 属性
python 复制代码
size_method = tensor.size
print(f"直接访问 size 属性: {size_method}")  # 输出: 直接访问 size 属性: <built-in method size of Tensor object at 0x7fee569194a0>

在第二个示例中,我们得到的是一个方法对象的引用,而不是实际的尺寸信息。

获取特定维度的大小

要获取特定维度的大小,你需要调用 size(dim),其中 dim 是你感兴趣的维度索引:

python 复制代码
size_dim1 = tensor.size(1)
print(f"维度 1 的大小: {size_dim1}")  # 输出: 维度 1 的大小: 3

使用 shape 属性

shape 属性是更直接获取张量尺寸的一种方式:

python 复制代码
shape = tensor.shape
print(f"使用 shape 属性: {shape}")  # 输出: 使用 shape 属性: torch.Size([2, 3])

总结

  • tensor.size 返回一个方法对象引用。
  • tensor.size() 返回一个 torch.Size 对象,表示张量的形状。
  • tensor.size(dim) 返回特定维度的大小。
  • tensor.shape 直接返回一个 torch.Size 对象,表示张量的形状。

完整示例

python 复制代码
import torch

tensor = torch.tensor([[1.0, 2.0, 3.0],
                       [4.0, 5.0, 6.0]])

# 使用 size() 方法
size = tensor.size()
print(f"使用 size() 方法: {size}")  # 输出: 使用 size() 方法: torch.Size([2, 3])

# 直接访问 size 属性
size_method = tensor.size
print(f"直接访问 size 属性: {size_method}")  # 输出: 直接访问 size 属性: <built-in method size of Tensor object at 0x7fee569194a0>

# 获取特定维度的大小
size_dim1 = tensor.size(1)
print(f"维度 1 的大小: {size_dim1}")  # 输出: 维度 1 的大小: 3

# 使用 shape 属性
shape = tensor.shape
print(f"使用 shape 属性: {shape}")  # 输出: 使用 shape 属性: torch.Size([2, 3])
相关推荐
虾球xz1 小时前
游戏引擎学习第298天:改进排序键 - 第1部分
人工智能·学习·游戏引擎
PixelMind1 小时前
【LUT技术专题】极小尺寸LUT算法:TinyLUT
人工智能·深度学习·算法·lut·图像超分辨率
聚客AI2 小时前
PyTorch高阶技巧:构建非线性分类器与梯度优化全解析
人工智能·pytorch·深度学习·神经网络·语言模型·自然语言处理·transformer
40+老码农的修行之旅2 小时前
跟踪AI峰会,给自己提出的两个问题。
人工智能
摆烂仙君4 小时前
LoRA(Low-Rank Adaptation)
人工智能·计算机视觉
杰瑞学AI5 小时前
深度学习中的分布偏移问题及其解决方法
人工智能·深度学习·机器学习·ai
学算法的程霖5 小时前
分享|16个含源码和数据集的计算机视觉实战项目
人工智能·pytorch·深度学习·机器学习·计算机视觉·目标跟踪·研究生
带电的小王5 小时前
【动手学深度学习】2.3. 线性代数
人工智能·深度学习·线性代数
Listennnn6 小时前
点云(point cloud):自动驾驶的“三维扫描图“
人工智能·机器学习·自动驾驶
土拨鼠不是老鼠6 小时前
windows 下用yolov5 训练模型 给到opencv 使用
人工智能·opencv·yolo