torch.Tensor和torch.tensor有什么区别?

本文详细解析了PyTorch中torch.Tensor与torch.tensor的使用区别,包括构造空张量的方法及如何根据数据类型自动选择张量类型。
部署运行你感兴趣的模型镜像

文章目录

介绍

在PyTorch 中,torch.Tensor是主要的tensor类,所有的tensor都是torch.Tensor的实例。torch.Tensortorch.FloatTensor的别名。
torch.tensor是一个函数,返回的是一个tensor,在PyTorch官方文档中,描述如下:

torch.tensor(data, dtype=None, device=None, requires_grad=False) → Tensor
Constructs a tensor with data.

区别1

所以需要注意的一点是:

  • torch.Tensor(data)是将输入的data转化torch.FloatTensor
  • torch.tensor(data):(当你未指定dype的类型时)将data转化为torch.FloatTensortorch.LongTensortorch.DoubleTensor等类型,转化类型依据于data的类型或者dtype的值

区别2

使用如下语句:tensor_without_data = torch.Tensor()可以创建一个空的FloatTensor,而当你使用tensor_without_data = torch.tensor()时候则会报错:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-ebc3ceaa76d2> in <module>()
----> 1 torch.tensor()

TypeError: tensor() missing 1 required positional arguments: "data"

当你想要创建一个空的tensor时候,可以使用如下的方法:

  • tensor_without_data = torch.Tensor() # tensor([])
  • tensor_without_data = torch.tensor(()) # tensor([])
  • tensor_without_data = torch.empty([]) # tensor(0.)

所以torch.Tensor应该说是同时具有torch.tensortorch.empty的功能,但是使用torch.Tensor可能会使你的代码confusing,所以最好还是使用torch.tensortorch.empty,而不是torch.Tensor


您可能感兴趣的与本文相关的镜像

PyTorch 2.7

PyTorch 2.7

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### `torch.Tensor` `torch.tensor` 的区别PyTorch 中,`torch.Tensor` `torch.tensor` 都用于创建张量,但它们在行为用途上有显著差异。 #### 类型推断与数据类型 - **`torch.Tensor`** 是一个类,它是默认张量类型 `torch.FloatTensor` 的别名。当使用 `torch.Tensor()` 创建张量时,无论输入的数据类型是什么,返回的张量都会是 `float32` 类型。例如: ```python a = torch.Tensor([1, 2]) print(a.dtype) # 输出:torch.float32 ``` 这意味着即使传入的是整数列表,生成的张量也会被转换为浮点数类型 [^5]。 - **`torch.tensor`** 是一个函数,它从提供的数据中推断出数据类型。例如: ```python b = torch.tensor([1, 2]) print(b.dtype) # 输出:torch.int64 ``` 在这个例子中,由于输入的是整数列表,生成的张量将保持为整数类型 [^3]。 #### 初始化方式 - 使用 `torch.Tensor()` 创建的张量会根据是否提供了数据来决定如何初始化。如果没有提供数据,则返回一个空张量;如果提供了数据,则将其转换为 `float32` 类型并创建相应的张量 [^5]。 ```python c = torch.Tensor() print(c) # 输出:tensor([]) ``` - `torch.tensor()` 必须提供数据参数。它可以接受各种形式的数据(如列表、NumPy 数组等),并且保留原始数据类型。如果不希望推断数据类型,也可以显式指定数据类型 [^5]。 ```python d = torch.tensor([1, 2], dtype=torch.float32) print(d.dtype) # 输出:torch.float32 ``` #### 空张量的创建 - `torch.Tensor()` 可以直接调用而不带任何参数,此时它会创建一个没有元素的零维张量 。 ```python e = torch.Tensor() print(e.shape) # 输出:torch.Size([]) ``` - 相比之下,`torch.tensor()` 要求必须传入数据,即使是空列表也需要明确给出才能创建空张量 。 ```python f = torch.tensor([]) print(f.shape) # 输出:torch.Size([0]) ``` #### 总结 综上所述,`torch.Tensor` 更像是一个构造器,它总是生成 `float32` 类型的张量,并且对于无参调用能够产生空张量。而 `torch.tensor` 则更加灵活,它可以基于输入数据自动推断出合适的数据类型,并且需要明确的数据输入来进行初始化。因此,在实际开发过程中,如果希望获得更精确控制的数据类型或者利用自动类型推断功能,应选择合适的函数或构造方法 [^1]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值