【问题标题】:tensorflow.while_loop with sample from tensorflow_distribution in conditiontensorflow.while_loop 带有来自 tensorflow_distribution 的样本在条件
【发布时间】:2018-11-13 02:10:43
【问题描述】:

我正在努力使以下代码正常工作。它会一直执行伯努利试验,直到成功为止。

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

def geometric(p):
    def cond(_):
        return tf.equal(1, tfd.Bernoulli(p).sample())
    def body(t):
        return tf.add(t, 1)
    return tf.while_loop(
        cond, # name is automatically generated
        body,
        [tf.constant(0)]
    )

with tf.Session() as sess:
    acc = sess.run(geometric(0.001))
    print(acc)

上面的代码打印出从03的值,这是没有意义的。我希望它能打印数百个。此外,当我将 geometric 调用更改为 geometric(0.000001) 时,我仍然得到相同的结果。

谁能指出我上面的代码有什么问题?

【问题讨论】:

    标签: tensorflow while-loop tensorflow-probability


    【解决方案1】:

    你的 while 条件反转了吗?我想你想要 while not 1 (while 0)

    【讨论】:

    • 我设法修复了代码。这是问题之一。另一个是调用应该是tfd.Bernoulli(probs=p)
    • 啊,是的。它默认使用 logits,认为大多数用户通常会执行 GLM 或分类器的某些神经网络参数化之类的操作。我认为团队中已经讨论过不使用关键字 args 是错误的,以避免这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多