Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在张量流概率中,与贝叶斯层损失特性相关的损失是什么?_Python_Tensorflow_Machine Learning_Bayesian_Tensorflow Probability - Fatal编程技术网

Python 在张量流概率中,与贝叶斯层损失特性相关的损失是什么?

Python 在张量流概率中,与贝叶斯层损失特性相关的损失是什么?,python,tensorflow,machine-learning,bayesian,tensorflow-probability,Python,Tensorflow,Machine Learning,Bayesian,Tensorflow Probability,TensorFlow概率层(例如)有一个损失方法(或属性),可以获取“与该层相关的损失”。有人能解释这些损失是什么吗 浏览之后,我认为损失是指权重和偏差的先验分布和后验分布之间的Kullback-Leibler散度。如果有人比我更了解这些事情,那么请纠正我。你的怀疑是正确的,尽管没有很好的记录。例如,在下面的一段代码中 import tensorflow_probability as tfp model = tf.keras.Sequential([ tfp.layers.DenseF

TensorFlow概率层(例如)有一个
损失
方法(或属性),可以获取“与该层相关的损失”。有人能解释这些损失是什么吗


浏览之后,我认为损失是指权重和偏差的先验分布和后验分布之间的Kullback-Leibler散度。如果有人比我更了解这些事情,那么请纠正我。

你的怀疑是正确的,尽管没有很好的记录。例如,在下面的一段代码中

import tensorflow_probability as tfp

model = tf.keras.Sequential([
    tfp.layers.DenseFlipout(512, activation=tf.nn.relu),
    tfp.layers.DenseFlipout(10),
])

logits = model(features)
neg_log_likelihood = tf.nn.softmax_cross_entropy_with_logits(
    labels=labels, logits=logits)

kl = sum(model.losses) # Losses are summed

# The negative log-likelihood and the KL term are combined
loss = neg_log_likelihood + kl 

train_op = tf.train.AdamOptimizer().minimize(loss)
如中所述,
损失
相加得到KL项,对数似然项单独计算,并与KL项组合形成ELBO


您可以看到添加的损失,在一些间接操作之后,显示正在使用
{kernel,bias}\u散度fn
,而这反过来默认为调用
tfd.kl_散度(q,p)
lambda
,为什么损失要求和而不是平均?直觉上,在我看来,我们应该对它们进行平均,然后在将结果添加到最终损失之前,我们应该将平均值除以小批量中的示例数。在Keras的情况下,你知道每层的KL散度是如何精确地加到最终损失中的吗?