【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])
相关推荐
AI资源库几秒前
GLM-4.7-Flash模型深入解析
人工智能·语言模型
一切尽在,你来20 分钟前
1.2 LangChain 1.2.7 版本核心特性与升级点
人工智能·langchain
LYFlied22 分钟前
AI大时代下前端跨端解决方案的现状与演进路径
前端·人工智能
深蓝电商API25 分钟前
图片验证码识别:pytesseract+opencv入门
人工智能·opencv·计算机视觉·pytesseract
.Katherine௰25 分钟前
AI数字人模拟面试机器人
人工智能
光影少年26 分钟前
AI 前端 / 高级前端
前端·人工智能·状态模式
zhangshuang-peta31 分钟前
OpenCode vs Claude Code vs OpenAI Codex:AI编程助手全面对比
人工智能·ai agent·mcp·peta
Bruk.Liu34 分钟前
(LangChain 实战14):基于 ChatMessageHistory 自定义实现对话记忆功能
人工智能·python·langchain·agent
代码改善世界35 分钟前
CANN中的AI算子开发:ops-nn仓库深度解读
人工智能
大江东去浪淘尽千古风流人物1 小时前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法