Python 火炬张量和火炬张量的区别是什么?
从版本0.4.0开始,可以使用Python 火炬张量和火炬张量的区别是什么?,python,pytorch,Python,Pytorch,从版本0.4.0开始,可以使用torch.tensor和torch.tensor 有什么区别?提供这两个非常相似且令人困惑的替代方案的原因是什么?根据 torch.Tensor构造函数被重载,以执行与torch.Tensor和torch.empty相同的操作。人们认为这种重载会使代码混乱,因此将torch.Tensor分为torch.Tensor和torch.empty 因此,是的,在某种程度上,torch.tensor的工作原理与torch.tensor类似(当您传入数据时)。不,两者都不应该
torch.tensor
和torch.tensor
有什么区别?提供这两个非常相似且令人困惑的替代方案的原因是什么?根据
torch.Tensor
构造函数被重载,以执行与torch.Tensor
和torch.empty
相同的操作。人们认为这种重载会使代码混乱,因此将torch.Tensor
分为torch.Tensor
和torch.empty
因此,是的,在某种程度上,
torch.tensor
的工作原理与torch.tensor类似(当您传入数据时)。不,两者都不应该比另一种更有效。只是torch.empty
和torch.tensor
的API比torch.tensor
构造函数好。在PyTorchtorch中,tensor
是主要的tensor类。所以所有的张量都只是torch.Tensor
的实例
当您调用torch.Tensor()
时,您将得到一个没有任何数据的空张量
相反,torch.tensor
是一个返回张量的函数。在报告中说:
用数据
构造张量
这也解释了为什么通过调用以下命令创建没有数据的空“torch.tensor”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"
输出:
tensor([])
除了上面的答案,我注意到torch.Tensor()
将使用默认数据类型初始化Tensor(如torch.get\u default\u dtype()
中的定义)<另一方面,code>torch.tensor()
将从数据中推断数据类型
比如说,
tensor_arr = torch.tensor([[2,5,6],[9,7,6]])
tensor_arr
将打印:
张量([[2,5,6],[9,7,6]])
及
将打印:
张量([2,5,6.],[9,7,6.])
因为默认数据类型是float32。
torch.tensor自动推断数据类型,而torch.tensor
返回torch.FloatTensor。我建议你坚持
torch.tensor,如果您愿意的话,它也有像dtype这样的参数
更改类型
是创建参数时使用的常用方法(例如,)
为什么??因为它非常快。它甚至比它快一点
输出:
torch.Tensor()
和与torch.empty()
非常相似,返回一个充满未初始化数据的张量
为什么我们不在\uuuu init\uuuu
中初始化参数,而从技术上讲这是可能的
以下是torch.Tensor
在nn.Linear
中实际使用的
self.weight = nn.Parameter(torch.Tensor(out_features, in_features))
我们不会根据设计对其进行初始化。还有另一种reset\u parameters()
方法,因为在训练过程中可能需要再次“重置”参数,所以我们在\u init\u()
方法末尾调用reset\u parameters()
也许将来,torch.empty()
将取代torch.Tensor()
,因为它们实际上是相同的
还有一个很好的选项是reset\u parameters()
,您可以创建自己的版本,并根据需要更改原始初始化过程
tensor_arr = torch.tensor([[2,5,6],[9,7,6]])
tensor_arr
tensor_arr = torch.Tensor([[2,5,6],[9,7,6]])
tensor_arr
import torch
torch.set_default_dtype(torch.float32) # default
%timeit torch.empty(1000,1000)
%timeit torch.Tensor(1000,1000)
%timeit torch.ones(1000,1000)
%timeit torch.tensor([[1]*1000]*1000)
68.4 µs ± 789 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
67.9 µs ± 349 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
1.26 ms ± 8.61 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
36.1 ms ± 610 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
self.weight = nn.Parameter(torch.Tensor(out_features, in_features))