在张量流中获取随机伽玛分布,如numpy.random.gamma

时间:2017-02-20 10:25:11

标签: python-3.x numpy tensorflow

您好我是tensorflow的新手,我正试图在tensorflow中生成随机伽玛分布,就像numpy.random.gamma

我的numpy代码是: -

self._lambda = 1 * np.random.gamma(100., 1. / 100, (self.n_topic, self.n_voca))

其中n_topic=240n_voca=198

我的张量流代码是: -

 self._tf_lambda = tf.random_gamma((self.n_topic, self.n_voca),1, dtype=tf.float32, seed=0, name='_tf_lambda')

这是正确的实施吗?我相信我无法理解tf.random_gamma成为self._lambda <> self.tf_lambda的参数。

1 个答案:

答案 0 :(得分:2)

您在分发中设置了不同的形状参数,因此预计它们会有所不同。

值得注意的是,numpy有一个&#34; scale&#34;参数,而TF有一个&#34;反比例&#34;参数。因此必须将其反转以获得相同的分布。

具有匹配分布的Jupyter笔记本示例:

%matplotlib inline
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

size = (50000,)
shape_parameter = 1.5
scale_parameter = 0.5
bins = np.linspace(-1, 5, 30)

np_res = np.random.gamma(shape=shape_parameter, scale=scale_parameter, size=size)

# Note the 1/scale_parameter here

tf_op = tf.random_gamma(shape=size, alpha=shape_parameter, beta=1/scale_parameter)
with tf.Session() as sess:
    tf_res = sess.run(tf_op)

plt.hist(tf_res, bins=bins, alpha=0.5);
plt.hist(np_res, bins=bins, alpha=0.5);

Histogram plot of results