2017-10-09 37 views

回答

3

小非负数初始化变量:

norm = tf.random_uniform_initializer(minval=0, maxval = 1, dtype=tf.float32) 
with tf.variable_scope('scope') as scope: 
    w = tf.get_variable('w', [inp.get_shape()[1], output_dim], initializer=norm, dtype=tf.float32) 
+0

这是非负面的吗?正态分布的平均值为0,可以取负值 – gdelab

+0

可以在[0,1]之间使用均匀分布。 –

+0

编辑我的答案 –

3

有非负random numbers in TensorFlow几个选项。在[minval, maxval)

w = tf.Variable(tf.random_uniform(shape, minval=0, maxval=max)) 

均匀随机数:正如其他人已经提到的,你可以使用tf.random_uniform。对于更一般的分布,您可以使用tf.random_gamma,该参数从gamma distribution中抽取样本,参数为形状参数alpha,反比例参数betaalpha必须提供,但beta=1默认情况下(即使指纹说None):

w = tf.Variable(tf.random_gamma(shape, alpha=alpha, beta=beta)) 

伽玛分布有支持[0, +inf)和其它的一些特性(在某些假设的最大熵分布,结合之前的一些事情在贝叶斯统计中)。取决于您的参数,您可以从中获得很多不同的形状。它与正态分布类似,但仅适用于正数。

你也可以(虽然我不知道,我会推荐它,它感觉怪怪的)使用tf.truncated_random_normal,它从一个正态分布样本指定meanstddev,但样品的加或减2外标准差下降,重采样:

w = tf.Variable(tf.truncated_random_normal(shape, mean=mean, stddev=stddev)) 

其中mean将一些正值,stddev最多等于mean/2