我正在尝试使用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.2tensorflow-probability == 0.5.0
tensorflow == 1.12.0
答案 0 :(得分:1)
要在图形模式下进行确定性输出,需要同时设置图形随机种子(tf.set_random_seed
)和操作随机种子(seed=
在示例调用中)。
TFv2中的随机采样器仍在运行sorted out。就目前而言,我的最佳理解是,您可以在对每个采样器进行每次调用之前先调用tf.set_random_seed
,然后将采样器一个seed=
传递给采样器,如果您希望有确定性的输出。
答案 1 :(得分:0)
除了在mcmc中为sample或sample_chain设置种子之外,您可能还需要设置以下内容:
...
include_directories(/home/user/occt/build_r/include/opencascade/)
add_executable(testOCCT
main.cpp
step2stl.cpp
)
find_package(OpenCASCADE REQUIRED NO_DEFAULT_PATH)
set(OCCT_LIBS TKMesh; TKSTEP; TKSTL; TKXSBase; TKernel)
target_link_libraries(testOCCT ${OCCT_LIBS})
答案 2 :(得分:0)
现在更干净了,我们支持TFP中的完全确定性随机性。您可以传递两个整数的元组作为种子,也可以传递形状为(2,)的张量来触发确定性行为。 tfp.random.split_seed在这里也很重要。