从0.4.0版本开始,就可以使用torch.tensor和torch.Tensor了
有什么关系?提供这两种非常相似和混乱的备选方案的理由是什么?
发布于 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的情况下创建一个空的张量实例没有问题,方法是:
tensor_without_data = torch.Tensor()但在另一边:
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" But in general there is no reason to choose `torch.Tensor` over `torch.tensor`. Also `torch.Tensor` lacks a docstring. 在没有data的情况下创建张量的类似行为,如with:torch.Tensor(),可以使用以下方法实现:
torch.tensor(())输出:
tensor([])发布于 2018-08-18 19:22:49
根据对[医]火把讨论的讨论,torch.Tensor构造函数被重载,以完成与torch.tensor和torch.empty相同的任务。人们认为这种过载会使代码混淆,因此将torch.Tensor拆分为更高级的torch.tensor和torch.empty。
所以是的,在某种程度上,torch.tensor的工作方式类似于to torch.Tensor (当您传入数据时). no,两者都不应该比其他的效率更高。这只是因为torch.empty和torch.tensor具有比torch.Tensor更好的API。
发布于 2020-07-22 23:35:22
除上述答案外,我注意到:
torch.Tensor()创建一个默认数据类型的张量,由torch.get_default_dtype()定义。torch.tensor()将从数据中推断数据类型。例如:
>>> torch.Tensor([1, 2, 3]).dtype
torch.float32
>>> torch.tensor([1, 2, 3]).dtype
torch.int64https://stackoverflow.com/questions/51911749
复制相似问题