Python PyTorch-将张量与标量相乘得到零向量

Python PyTorch-将张量与标量相乘得到零向量,python,numpy,pytorch,Python,Numpy,Pytorch,我不知道为什么张量的结果都是0。这里有什么问题吗 >>> import torch >>> import numpy as np >>> import math >>> torch.__version__ '0.4.1' >>> np.__version__ '1.15.4' >>> torch.arange(0, 10, 2) *-(math.log(10000.0) / 10) t

我不知道为什么张量的结果都是0。这里有什么问题吗

>>> import torch
>>> import numpy as np
>>> import math

>>> torch.__version__
'0.4.1'
>>> np.__version__
'1.15.4'

>>> torch.arange(0, 10, 2) *-(math.log(10000.0) / 10)
tensor([0, 0, 0, 0, 0])
>>> np.arange(0, 10, 2) *-(math.log(10000.0) / 10)
array([-0.        , -1.84206807, -3.68413615, -5.52620422, -7.3682723 ])

>>> torch.arange(0, 10, 2)
tensor([0, 2, 4, 6, 8])
>>> np.arange(0, 10, 2)
array([0, 2, 4, 6, 8])

使用0.4.0获得与numpy相同的结果时,如注释中所述:

tensor([-0.0000, -1.8421, -3.6841, -5.5262, -7.3683])
然而,对于
0.4.1
我也得到了一个零向量

原因是
torch.arange(0,10,2)
0.4.0返回类型为
float
的张量,而为0.4.1返回类型为
long
的张量

因此,将张量转换为
float
应该适合您:

torch.arange(0, 10, 2).float() *-(math.log(10000.0) / 10)

相乘
long
float
通过大量舍入工作,因为结果仍然是
long
类型的张量。因此,当将
FloatTensor
转换为
LongTensor
时,介于-1和1之间的值将四舍五入为0

由于
-(math.log(10000.0)/10)
导致
-0.9210340371976183
您的结果是
0
。因此,在相乘之前,有效地将
-0.9210340371976183
转换为类型
long
。但在转换时,它将被舍入为
0
,请参见以下示例:

t = torch.tensor((-(math.log(10000.0) / 10)))
print('FloatTensor:', t)
print('Converted to Long:', t.long())
输出:

FloatTensor: tensor(-0.9210)
Converted to Long: tensor(0)
因此:

变成:

torch.arange(0, 10, 2).float() * 0
因此得到了一个零张量



还有一些例子:

如果将其与1到2之间的值相乘,比如说1.7,它将始终向下舍入为1:

t = torch.tensor(range(5), dtype=torch.long)
print(t)
print(t * 1.7)
输出:

tensor([ 0,  1,  2,  3,  4])
tensor([ 0,  1,  2,  3,  4])
tensor([ 0,  1,  2,  3,  4])
tensor([ 0,  2,  4,  6,  8])
2.7
相乘时,同样会导致
2
的有效相乘:

t = torch.tensor(range(5), dtype=torch.long)
print(t)
print(t * 2.7)
输出:

tensor([ 0,  1,  2,  3,  4])
tensor([ 0,  1,  2,  3,  4])
tensor([ 0,  1,  2,  3,  4])
tensor([ 0,  2,  4,  6,  8])

结果是
张量([-0.0000,-1.8421,-3.6841,-5.5262,-7.3683])
对于我来说,v
0.4.0a0+3749c58
Python版本3.7.1Yes。你能详细解释一下原因吗?没有.float(),我加/减1,2。。。到(math.log(10000.0)/10)并将得到类似于张量([0,-2,-4,-6,-8])、张量([0,0,0,0,0,0])、张量([0,2,4,6,8])…@Kuo谢谢,我添加了更多的示例,以使乘法的行为
long
*
float
更加清晰!