从0.4.0版开始,可以使用torch.tensor
和torch.Tensor
有什么不同?提供这两种非常相似且令人困惑的替代方案的原因是什么?
在PyTorch中torch.Tensor
是主要的张量类。因此,所有张量只是的实例torch.Tensor
。
当您打电话时,torch.Tensor()
您将得到一个没有任何张量的空张量data
。
相反,torch.tensor
是一个返回张量的函数。在文档中说:
Run Code Online (Sandbox Code Playgroud)torch.tensor(data, dtype=None, device=None, requires_grad=False) ? Tensor
用构造张量
data
。
torch.Tensor
没有data
通过调用:
tensor_without_data = torch.Tensor()
Run Code Online (Sandbox Code Playgroud)
但另一方面:
tensor_without_data = torch.tensor()
Run Code Online (Sandbox Code Playgroud)
会导致错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-ebc3ceaa76d2> in <module>()
----> 1 torch.tensor()
TypeError: tensor() missing 1 required positional arguments: "data"
Run Code Online (Sandbox Code Playgroud)
但总的来说,没有理由去选择torch.Tensor
了torch.tensor
。也torch.Tensor
缺少文档字符串。
创建不data
具有with 的张量的类似行为torch.Tensor()
:
torch.tensor(())
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([])
Run Code Online (Sandbox Code Playgroud)
小智 6
根据pytorch上的讨论,
torch.Tensor
构造函数被重载以与torch.tensor
和 进行相同的操作 torch.empty
。人们认为这种重载会使代码混乱,因此将其拆分 torch.Tensor
为 torch.tensor
和torch.empty
。
因此,是的,在某种程度上,它的 torch.tensor
工作方式类似于torch.Tensor(当您传递数据时)。不,这两个都不应该比另一个更有效。这只是在 torch.empty
和 torch.tensor
有一个更好的API比 torch.Tensor
构造。
除了上述答案之外,我注意到torch.Tensor(<data>)
将使用默认数据类型(如 中定义torch.get_default_dtype()
)初始化张量。torch.tensor(<data>)
,另一方面,将从数据推断数据类型。
例如,
tensor_arr = torch.tensor([[2,5,6],[9,7,6]])
tensor_arr
Run Code Online (Sandbox Code Playgroud)
将打印:
tensor([[2, 5, 6], [9, 7, 6]])
和
tensor_arr = torch.Tensor([[2,5,6],[9,7,6]])
tensor_arr
Run Code Online (Sandbox Code Playgroud)
将打印:
tensor([[2., 5., 6.], [9., 7., 6.]])
因为默认数据类型是 float32。
https://discuss.pytorch.org/t/difference- Between-torch-tensor-and-torch-tensor/30786/2
torch.tensor 自动推断数据类型,而 torch.Tensor 返回 torch.FloatTensor。如果您想更改类型,我建议坚持使用 torch.tensor,它也有 dtype 等参数。
归档时间: |
|
查看次数: |
1312 次 |
最近记录: |