【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])
相关推荐
工藤学编程15 分钟前
零基础学AI大模型之RAG技术
人工智能
安替-AnTi32 分钟前
PandaWiki:AI 驱动的开源知识库系
人工智能·embedding·检索增强·知识库·rag·查询优化
迦蓝叶34 分钟前
JAiRouter v1.0.0 正式发布:企业级 AI 服务网关的开源解决方案
java·运维·人工智能·网关·spring·ai·开源
长空任鸟飞_阿康41 分钟前
Node.js 核心模块详解:fs 模块原理与应用
前端·人工智能·ai·node.js
可触的未来,发芽的智生1 小时前
触摸未来2025-10-18:生成文字的小宇宙矩阵溯源
人工智能·python·神经网络·程序人生·自然语言处理
武子康1 小时前
AI-调查研究-106-具身智能 机器人学习数据采集工具和手段:传感器、API、遥操作、仿真与真人示教全流程
人工智能·深度学习·机器学习·ai·系统架构·机器人·具身智能
Python智慧行囊1 小时前
图像处理-opencv(一)
人工智能·opencv·计算机视觉
StarPrayers.1 小时前
损失函数(Loss Function)、反向传播(Backward Propagation)和优化器(Optimizer)学习笔记
人工智能·笔记·深度学习·学习
IT_陈寒1 小时前
Vite 5个隐藏技巧让你的项目构建速度提升50%,第3个太香了!
前端·人工智能·后端
孤廖1 小时前
吃透 C++ 栈和队列:stack/queue/priority_queue 用法 + 模拟 + STL 标准实现对比
java·开发语言·数据结构·c++·人工智能·深度学习·算法