Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 火炬张量和火炬张量的区别是什么?_Python_Pytorch - Fatal编程技术网

Python 火炬张量和火炬张量的区别是什么?

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类似(当您传入数据时)。不,两者都不应该

从版本0.4.0开始,可以使用
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
构造函数好。

在PyTorch
torch中,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))