首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有标量的PyTorch乘法张量产生零向量

具有标量的PyTorch乘法张量产生零向量
EN

Stack Overflow用户
提问于 2018-11-25 19:33:35
回答 1查看 12.2K关注 0票数 5

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

代码语言:javascript
运行
复制
>>> 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])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-25 19:54:43

正如注释中所写的,当使用0.4.0时,会得到与使用numpy相同的结果:

代码语言:javascript
运行
复制
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应该对您有效:

代码语言:javascript
运行
复制
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时,请参见此示例:

代码语言:javascript
运行
复制
t = torch.tensor((-(math.log(10000.0) / 10)))
print('FloatTensor:', t)
print('Converted to Long:', t.long())

输出:

代码语言:javascript
运行
复制
FloatTensor: tensor(-0.9210)
Converted to Long: tensor(0)

因此:

代码语言:javascript
运行
复制
torch.arange(0, 10, 2).float() *-(math.log(10000.0) / 10)

变成:

代码语言:javascript
运行
复制
torch.arange(0, 10, 2).float() * 0

因此,你会得到一个零张量作为结果。

更多的例子:

如果将其与1和2之间的值相乘,假设为1.7,它将始终四舍五入为1:

代码语言:javascript
运行
复制
t = torch.tensor(range(5), dtype=torch.long)
print(t)
print(t * 1.7)

输出:

代码语言:javascript
运行
复制
tensor([ 0,  1,  2,  3,  4])
tensor([ 0,  1,  2,  3,  4])

类似地,当与2.7相乘导致2的有效相乘时

代码语言:javascript
运行
复制
t = torch.tensor(range(5), dtype=torch.long)
print(t)
print(t * 2.7)

输出:

代码语言:javascript
运行
复制
tensor([ 0,  1,  2,  3,  4])
tensor([ 0,  2,  4,  6,  8])
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53467011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档