python - 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)
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)返回 float 类型的张量为 0.4.0 而它返回类型为 long 的张量为 0.4.1 .

所以将你的张量转换为 float应该适合你:
torch.arange(0, 10, 2).float() *-(math.log(10000.0) / 10)

乘法 longfloat通过重舍入工作,因为结果仍然是 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/

相关文章:

python - 在 Python 2.7.3 中将字段名称分配给 numpy 数组

python - 获取 Pandas DataFrame 可读数据类型

python - 与 Numpy 相比优化 Cython 循环

python - PyTorch 中的高效指标评估

python - pytorch损失值不变

python - 安装 ipython qtconsole mac osx - 在系统上找不到 pyqt

python - Django:使用模型继承时如何检查对象类别?

python - torch.nn.sequential 与多个 torch.nn.linear 的组合

python - 在 pandas 中使用 sumproduct 或 dot 函数

python - 连续状态和 Action 空间的强化学习