- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有两个张量,prob_a
和 prob_b
,形状为 [None, 1000]
,我想从 计算 KL 散度code>prob_a
到 prob_b
。 TensorFlow 中是否有针对此的内置函数?我尝试使用 tf.contrib.distributions.kl(prob_a, prob_b)
,但它给出了:
NotImplementedError: No KL(dist_a || dist_b) registered for dist_a type Tensor and dist_b type Tensor
如果没有内置函数,什么是好的解决方法?
最佳答案
假设您的输入张量 prob_a
和 prob_b
是沿着最后一个轴总和为 1 的概率张量,您可以这样做:
def kl(x, y):
X = tf.distributions.Categorical(probs=x)
Y = tf.distributions.Categorical(probs=y)
return tf.distributions.kl_divergence(X, Y)
result = kl(prob_a, prob_b)
一个简单的例子:
import numpy as np
import tensorflow as tf
a = np.array([[0.25, 0.1, 0.65], [0.8, 0.15, 0.05]])
b = np.array([[0.7, 0.2, 0.1], [0.15, 0.8, 0.05]])
sess = tf.Session()
print(kl(a, b).eval(session=sess)) # [0.88995184 1.08808468]
你会得到相同的结果
np.sum(a * np.log(a / b), axis=1)
但是,此实现有点错误(已在 Tensorflow 1.8.0 中检查过)。
如果您在 a
中的概率为零,例如如果您尝试使用 [0.8, 0.2, 0.0]
而不是 [0.8, 0.15, 0.05]
,您将得到 nan
,即使是 Kullback- Leibler 定义 0 * log(0/b)
应为零。
为了缓解这种情况,应该添加一些小的数值常量。在这种情况下,使用 tf.distributions.kl_divergence(X, Y, allow_nan_stats=False)
会导致运行时错误也是明智的。
此外,如果 b
中有一些零,您将获得 inf
值,allow_nan_stats=False
不会捕获这些值选项,因此也必须处理这些选项。
关于python - TensorFlow 有内置 KL 散度损失函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41863814/
在 VAE 教程中,两个正态分布的 kl-divergence 定义为: 而且在很多代码中,比如here , here和 here ,代码实现为: KL_loss = -0.5 * torch.su
我正在使用变分自动编码器类型模型,我的损失函数的一部分是均值为 0 和方差为 1 的正态分布与另一个均值和方差由我的模型预测的正态分布之间的 KL 散度。 我用以下方式定义了损失: def kl_lo
我想使用 R 计算两个 Gamma 分布的 KL 距离。 这是我的 R 代码: theta1 <- 0.2 theta2 <- 2 f <- function(u) { dgamma(u,
我正在尝试使用 KL 散度计算网络的准确性。预测是一个 k 维概率向量,应与相同维度的黄金标准概率分布进行比较。我试过这个: corr_subj_test = tf.contrib.distribut
在有关近端策略优化算法的原始论文中 https://arxiv.org/pdf/1707.06347.pdf 在等式(4)中,作者使用了KL[]表示的运算。不幸的是,他们从未给出它的定义。 我的问题:
我想使用 KL 散度作为指标对数据进行聚类。 在 K 均值中: 选择簇的数量。 随机初始化每个簇的平均值。 将每个数据点分配给具有最小距离值的簇c。 将每个聚类的平均值更新为分配给它的数据点的平均值。
我有以下问题。 我需要为特定应用锁定我的平板电脑。我在 KioskMode 中使用我的应用程序,但是我需要阻止一些按钮,“Switch_app”、“Volume_UP”、“Volume_DOWN”等。
根据 http://source.android.com/devices/tech/input/key-layout-files.html , android 按照以下顺序查询关键布局文件。 The
我有两个张量,prob_a 和 prob_b,形状为 [None, 1000],我想从 计算 KL 散度code>prob_a 到 prob_b。 TensorFlow 中是否有针对此的内置函数?我尝
假设我有两个 pdf 文件,例如: from scipy import stats pdf_y = stats.beta(5, 9).pdf pdf_x = stats.beta(9, 5).pdf
这是此问题的后续问题Keras backend mean function: " 'float' object has no attribute 'dtype' "? 我正在尝试为 Keras 制作一
我正在尝试使用 entropy 计算 KL 散度scipy的功能。 我的p是: array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0
我有两个概率分布。我应该如何在 PyTorch 中找到它们之间的 KL 散度?常规交叉熵仅接受整数标签。 最佳答案 是的,PyTorch 有一个名为 kl_div 的方法在 torch.nn.func
我有两个列表。两者都包括标准化百分比: 实际人口分布 = [0.2,0.3,0.3,0.2] sample_population_distribution = [0.1,0.4,0.2,0.3] 我希
我有两个 GMM,用于在同一空间中拟合两组不同的数据,我想计算它们之间的 KL 散度。 目前我正在使用 sklearn ( http://scikit-learn.org/stable/modules
我已经尝试并搜索了几天,但无法为我的问题提出任何解决方案: 我正在尝试在/system/usr/keylayout 中安装一个 .kl 文件来为我的应用程序重新映射一些键盘键。我有正确格式的正确 .k
我有两个(不同长度的)数字列表。使用 Python,我想用 10 个 bin 来计算直方图。然后我想用标准核(均值为 0 的高斯核,sigma=1)平滑这两个直方图然后我想计算这两个平滑直方图之间的
function [ d ] = hcompare_KL( h1,h2 ) %This routine evaluates the Kullback-Leibler (KL) distance bet
我正在尝试确定如何计算两个 torch.distribution.Distribution 对象的 KL 散度。到目前为止,我找不到执行此操作的功能。这是我尝试过的: import torch as
使用 tensorflow 作为后端时,如何计算 keras 中的 kl 散度?我计算 L1 损失如下: def l1_loss(y_true, y_pred): return K.sum(K
我是一名优秀的程序员,十分优秀!