我有兩個變數mean,stddev它們是形狀 (1,) 的張量,它們代表許多具有均值的正態分布,可以說是均值 [i] 和標準偏差 stddev[i]。
從這些分布中,我想為每個人在 [ low, up,]的范圍內采樣一個值,然后我想獲得采樣值的對數概率。
從檔案中,我發現該experimental_sample_and_log_prob方法幾乎適合我,因為它不會對我想要的值(低、高)范圍內的元素進行采樣。
所以我撰寫了幾行代碼,但它自然不能很好地作業,而且計算成本很高。
import tensorflow as tf
from tensorflow_probability import distributions as tfd
def sample_and_log_prob(dist, up, down):
samples = dist.sample()
accepted = False
print("Is {} accepted? {}".format(samples, accepted))
while not accepted:
# sample < up
cond1 = tf.less_equal(samples, up)
# sample > down
cond2 = tf.greater_equal(samples, down)
# if down < sample < up
accepted = tf.logical_and(cond1, cond2)
samples = tf.where(
tf.logical_not(accepted),
samples,
dist.sample())
print("Is {} accepted? {}".format(samples, accepted))
return samples, dist.log_prob(samples)
distribution = tfd.Normal(
loc=mean ,
scale=stddev,
validate_args=True,
allow_nan_stats=False)
samples, log_probs = sample_and_log_prob(distribution, up=-1, down=1)
有什么解決辦法嗎?
uj5u.com熱心網友回復:
聽起來你想要一個TruncatedNormal發行版。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/372848.html
