首页 > 解决方案 > “黑客的贝叶斯方法” jupyter notebook 不工作

问题描述

我正在阅读“黑客的贝叶斯方法”的在线 TensorFlow Probability (TFP) 版本。

但是当我执行 Ch2_MorePyMC_TFP.ipynb 的第一个单元格时, 发生以下错误:

AttributeError:模块“tensorflow”没有属性“contrib”

我想这个版本的“黑客的贝叶斯方法”jupyter notebook 是为 TF1 编写的。

您是否有此 jupyter notebook 的简单修复或更新版本与 TF2 一起使用?

标签: tensorflow2.0bayesiantensorflow-probability

解决方案


一些contrib功能被删除,其中一些被合并到TensorFlow核心中。您需要找到它们的等效版本。

import tensorflow as tf
import tensorflow_probability as tfp
tfd = tfp.distributions
tfb = tfp.bijectors

print(tf.__version__) # 2.5.0
print(tfp.__version__) # 0.12.1

例如,TensorFlow 中提供了第一个 contrib 函数,并且可以重写为:

parameter = tfd.Exponential(rate=1., name="poisson_param").sample()
rv_data_generator = tfd.Poisson(parameter, name="data_generator")
data_generator = rv_data_generator.sample()


data_generator_ = tf.nest.pack_sequence_as(
     data_generator,
     [t.numpy() if tf.is_tensor(t) else t
     for t in tf.nest.flatten(data_generator)])

print("Value of sample from data generator random variable:", data_generator_)

对于其他 TF 操作,您可以像这样替换它们:

with tf.compat.v1.variable_scope(tf.compat.v1.get_variable_scope(), reuse=tf.compat.v1.AUTO_REUSE):
    step_size = tf.compat.v1.get_variable(
        name='step_size',
        initializer=tf.constant(0.5, dtype=tf.float32),
        trainable=False,
        use_resource=True
    )

更多信息可以在文档中找到


推荐阅读