我不知道为什么张量结果全为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 :(得分: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
将float
和torch.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