Kuo*_*Kuo 5 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])
Run Code Online (Sandbox Code Playgroud)
正如评论中所写,使用0.4.0得到与 numpy 相同的结果:
tensor([-0.0000, -1.8421, -3.6841, -5.5262, -7.3683])
Run Code Online (Sandbox Code Playgroud)
然而,0.4.1我也得到了一个零向量。
原因是返回0.4.0类型的torch.arange(0, 10, 2)张量,而返回0.4.1类型的张量。floatlong
因此,将张量转换为float应该适合您:
torch.arange(0, 10, 2).float() *-(math.log(10000.0) / 10)
Run Code Online (Sandbox Code Playgroud)
乘法long和float通过重舍入进行工作,因为结果仍然是 类型的张量long。因此,当将 a 转换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())
Run Code Online (Sandbox Code Playgroud)
输出:
FloatTensor: tensor(-0.9210)
Converted to Long: tensor(0)
Run Code Online (Sandbox Code Playgroud)
因此:
torch.arange(0, 10, 2).float() *-(math.log(10000.0) / 10)
Run Code Online (Sandbox Code Playgroud)
变成:
torch.arange(0, 10, 2).float() * 0
Run Code Online (Sandbox Code Playgroud)
因此,你会得到一个为零的张量。
更多示例:
如果将其乘以 1 到 2 之间的值(例如 1.7),它将始终向下舍入为 1:
t = torch.tensor(range(5), dtype=torch.long)
print(t)
print(t * 1.7)
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([ 0, 1, 2, 3, 4])
tensor([ 0, 1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
类似地,当 与 相乘时,2.7得到 的有效乘法2:
t = torch.tensor(range(5), dtype=torch.long)
print(t)
print(t * 2.7)
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([ 0, 1, 2, 3, 4])
tensor([ 0, 2, 4, 6, 8])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11561 次 |
| 最近记录: |