我不知道为什么张量结果全为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() *-(math.log(10000.0) / 10)
变成:
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])
同样,当与
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, 2, 4, 6, 8])
关于python - PyTorch-将张量与标量相乘会得出零向量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53467011/