首页 > 解决方案 > 使用种子对张量流概率进行采样

问题描述

我正在尝试使用tensorflow-probability并开始使用一些非常简单的东西:

import tensorflow as tf
import tensorflow_probability as tfp

tf.enable_eager_execution()

tfd = tfp.distributions
poiss = tfd.Poisson(0.8)

poiss.sample(2, seed=1)
#> Out: <tf.Tensor: id=3569, shape=(2,), dtype=float32, numpy=array([0., 0.], dtype=float32)>

poiss.sample(2, seed=1)
#> Out: <tf.Tensor: id=3695, shape=(2,), dtype=float32, numpy=array([1., 0.], dtype=float32)>

poiss.sample(2, seed=1)
#> Out: <tf.Tensor: id=3824, shape=(2,), dtype=float32, numpy=array([2., 2.], dtype=float32)>

poiss.sample(2, seed=1)
#> Out: <tf.Tensor: id=3956, shape=(2,), dtype=float32, numpy=array([0., 1.], dtype=float32)>

我想当重复使用相同的种子时我会得到相同的结果,但不知何故,这不是真的。

我也尝试过不eager执行,但结果仍然无法重现。如果我添加类似tf.set_random_seed(12).

我想我缺少一些基本的东西?

对于那些感兴趣的人,我在 Ubuntu 16.04 上运行Python 3.5.2

张量流-概率==0.5.0
张量流==1.12.0

标签: tensorflowrandomtensorflow-probability

解决方案


对于图形模式下的确定性输出,您需要同时设置图形随机种子 ( tf.set_random_seed) 和 op 随机种子 (seed=在您的示例调用中)。

TFv2 中随机采样器的工作原理仍在整理中。目前,我最好的理解是,如果您想要确定性的输出,您可以在每次调用采样器tf.set_random_seed之前调用采样器,传递采样器 a 。seed=


推荐阅读