首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >torch.Tensor和torch.tensor有什么区别?

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

Stack Overflow用户
提问于 2018-08-18 19:06:14
回答 5查看 14.4K关注 0票数 50

从0.4.0版本开始,就可以使用torch.tensortorch.Tensor

有什么关系?提供这两种非常相似和混乱的备选方案的理由是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-08-18 20:11:03

在PyTorch中,torch.Tensor是主要的张量类。所以所有张量都只是torch.Tensor的实例。

当您调用torch.Tensor()时,您将得到一个没有任何data的空张量。

相反,torch.tensor是一个返回张量的函数。在文档中,它说:

torch.tensor(data,dtype=None,device=None,requires_grad=False)→张量 用data构造张量。

这也解释了为什么在没有torch.Tensor的情况下创建一个空的张量实例没有问题,方法是:

代码语言:javascript
复制
tensor_without_data = torch.Tensor()

但在另一边:

代码语言:javascript
复制
tensor_without_data = torch.tensor()

将导致错误:

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-ebc3ceaa76d2> in <module>()
----> 1 torch.tensor()

TypeError: tensor() missing 1 required positional arguments: "data"
代码语言:javascript
复制
  But in general there is no reason to choose `torch.Tensor` over `torch.tensor`. Also `torch.Tensor` lacks a docstring.  

在没有data的情况下创建张量的类似行为,如with:torch.Tensor(),可以使用以下方法实现:

代码语言:javascript
复制
torch.tensor(())

输出:

代码语言:javascript
复制
tensor([])
票数 51
EN

Stack Overflow用户

发布于 2018-08-18 19:22:49

根据对[医]火把讨论的讨论,torch.Tensor构造函数被重载,以完成与torch.tensortorch.empty相同的任务。人们认为这种过载会使代码混淆,因此将torch.Tensor拆分为更高级的torch.tensortorch.empty

所以是的,在某种程度上,torch.tensor的工作方式类似于to torch.Tensor (当您传入数据时).  no,两者都不应该比其他的效率更高。这只是因为torch.emptytorch.tensor具有比torch.Tensor更好的API。

票数 9
EN

Stack Overflow用户

发布于 2020-07-22 23:35:22

除上述答案外,我注意到:

  • torch.Tensor()创建一个默认数据类型的张量,由torch.get_default_dtype()定义。
  • torch.tensor()将从数据中推断数据类型。

例如:

代码语言:javascript
复制
>>> torch.Tensor([1, 2, 3]).dtype
torch.float32

>>> torch.tensor([1, 2, 3]).dtype
torch.int64
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51911749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档