tensorflow - 使用种子对张量流概率进行采样
问题描述
我正在尝试使用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
解决方案
对于图形模式下的确定性输出,您需要同时设置图形随机种子 ( tf.set_random_seed
) 和 op 随机种子 (seed=
在您的示例调用中)。
TFv2 中随机采样器的工作原理仍在整理中。目前,我最好的理解是,如果您想要确定性的输出,您可以在每次调用采样器tf.set_random_seed
之前调用采样器,并传递采样器 a 。seed=
推荐阅读
- spring - 在 Spring Boot 中实现 @LocalPort 等功能
- javascript - 像 ComponentDidUpdate 一样使用 useEffect
- r - 在R中的ifelse中循环行
- javascript - setTimeout 过早调用函数
- php - Laravel Google Compute Engine SMTP 问题
- c++ - 在使用显式循环的矩阵乘法中,Eigen 比 Fortran 慢得多
- python - 在python中最小化一大块列表变量
- javascript - 如何使用这个将数据保存在mysql中?
- sql - 如何在没有密钥的情况下删除插入的记录?
- java - 一次更新和附加 xml