ror*_*989 11 tensorflow tensorflow-probability
我正在运行使用Tensorflow概率实现的贝叶斯神经网络的示例代码.我的问题是关于用于变分推理的-ELBO损失的实现.-ELBO等于两个项的总和,即在代码中实现的'neg_log_likelihood'和'kl'.我很难理解'kl'术语的实现.
以下是模型的定义方式:
with tf.name_scope("bayesian_neural_net", values=[images]):
neural_net = tf.keras.Sequential()
for units in FLAGS.layer_sizes:
layer = tfp.layers.DenseFlipout(
units,
activation=FLAGS.activation)
neural_net.add(layer)
neural_net.add(tfp.layers.DenseFlipout(10))
logits = neural_net(images)
labels_distribution = tfd.Categorical(logits=logits)
Run Code Online (Sandbox Code Playgroud)
以下是"kl"术语的定义:
kl = sum(neural_net.losses) / mnist_data.train.num_examples
Run Code Online (Sandbox Code Playgroud)
我不确定'neural_net.losses'在这里返回什么,因为没有为'neural_net'定义的损失函数.显然,'neural_net.losses'会返回一些值,但我不知道返回值的含义是什么.对此有何评论?
我的猜测是L2规范,但我不确定.如果是这种情况,我们仍然遗漏了一些东西.根据VAE论文附录B,作者在先验标准正常时得出KL术语.它原来是非常接近的变参数,除了有额外的日志方差术语和常数项的L2规范.对此有何评论?
TensorFlow Keras Layerlosses的属性表示副作用计算,例如正则化器惩罚。与特定 TensorFlow 变量的正则化惩罚不同,这里代表 KL 散度计算。查看此处的实现以及文档字符串的示例:losses
我们说明了具有变分推理的贝叶斯神经网络,假设数据集为
features和labels。Run Code Online (Sandbox Code Playgroud)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) loss = neg_log_likelihood + kl train_op = tf.train.AdamOptimizer().minimize(loss)它使用 Flipout 梯度估计器将 Kullback-Leibler 散度最小化为常数,也称为负证据下界。它由两项之和组成:预期负对数似然,我们通过蒙特卡罗近似;以及 KL 散度,它是通过作为层参数的正则项添加的。
| 归档时间: |
|
| 查看次数: |
2051 次 |
| 最近记录: |