2017-10-09 96 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