【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])
相关推荐
fanged1 小时前
CNN的小体验
人工智能·深度学习·cnn
悸尢2 小时前
opencv颜色识别,hsv采用滑块调节
人工智能·opencv·计算机视觉
带带老表学爬虫2 小时前
opencv第一课-cnblog
人工智能·python·opencv
记录&日常3 小时前
Pip install 和Conda install 的区别和使用场景
人工智能
辰阳星宇3 小时前
N-gram算法的pytorch代码实现
人工智能·pytorch·python·深度学习·机器学习·自然语言处理
PeterClerk4 小时前
PCA算法降维代码示例
人工智能·算法·机器学习·pca
带带老表学爬虫4 小时前
2.opencv保存图片和摄像头读取
人工智能·opencv·计算机视觉
github_zwl4 小时前
昇思25天学习打卡营第6天|linchenfengxue
人工智能·学习·目标跟踪
hf2000125 小时前
实时智能全托管-云器Lakehouse重新定义多维数据分析
大数据·人工智能·数据分析
网恋褙骗八万5 小时前
pytorch跑手写体实验
人工智能·pytorch·python