PyTorch-将张量与标量相乘会得出零向量

时间:2018-11-25 11:33:35

标签: 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)
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])

1 个答案:

答案 0 :(得分:2)

使用 0.4.0 时,注释中的内容与numpy相同:

const Wrapper = styled.div`
  display:flex;
  flex-flow:row wrap;
  justify-content: space-between;`

但是使用const Article = styled.article` display:flex; flex-flow:row wrap; flex: 1 1 445px; max-height:275px;` 时,我的向量也为零。

这样做的原因是tensor([-0.0000, -1.8421, -3.6841, -5.5262, -7.3683]) 0.4.0 返回类型0.4.1的张量,而返回torch.arange(0, 10, 2)类型的张量> 0.4.1

因此将张量转换为float应该对您有用:

long


floattorch.arange(0, 10, 2).float() *-(math.log(10000.0) / 10) 乘以大数舍入,因为结果仍然是类型long的张量。因此,将float转换为long时,值介于-1和1之间将被舍入为0。

由于FloatTensor的结果是LongTensor,因此您的结果是-(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)

因此,您得到的张量为零。



更多示例:

如果将其乘以1到2之间的值(假设为1.7),它将始终四舍五入为1:

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

输出:

torch.arange(0, 10, 2).float() * 0

类似地,当与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