【发布时间】:2019-07-09 03:23:01
【问题描述】:
PyTorch 中是否有与 Tensorflow 的 tf.contrib.distributions.percentile 相同的功能?
【问题讨论】:
标签: python tensorflow pytorch
PyTorch 中是否有与 Tensorflow 的 tf.contrib.distributions.percentile 相同的功能?
【问题讨论】:
标签: python tensorflow pytorch
有趣的是,PyTorch 似乎并没有为此提供任何运算符,至少不是根据its search function。
不过幸运的是,PyTorch 张量可以很容易地与 NumPy 函数一起使用,因此您可以简单地调用 numpy.percentile,请参见下面的示例:
import torch as t
import numpy as np
x = t.Tensor([1,2,3])
print(np.percentile(x, 30)) # 30-th percentile of x
# 1.6
【讨论】:
其实icdf函数给出了逆累积密度函数值,也就是百分位数的值。
import torch
from torch.distributions import Normal
dist = Normal(torch.tensor([0.0]), torch.tensor([1.0]))
dist.icdf(torch.tensor([0.95])).data.numpy()
结果
array([1.6449], dtype=float32)
【讨论】:
我不知道利弊, 但是有一种方法可以将 cupy 与 pytorch dlpack 一起使用:
(cupy 不直接支持 pytorch 张量,CuPy 函数不接受 Torch 张量。)
import torch
from torch.utils.dlpack import to_dlpack
from torch.utils.dlpack import from_dlpack
import cupy
x = torch.Tensor([1, 2, 3]).cuda()
dx = to_dlpack(x)
cx = cupy.fromDlpack(dx)
print(cupy.percentile(cx, 30)) # 30-th percentile of x
# 1.5999999642372131
【讨论】: