[英]Weight initialization in tensorflow
我有一個使用Tensorflow的DNN,它工作得很好。 我的問題是關於權重初始化,這里是代碼發生的部分:
def train(numberOfFeatures,numberOFclasses):
#sesssion definition
sess = tf.InteractiveSession()
#input Placeholder
with tf.name_scope('input'):
x =tf.placeholder(tf.float32,[None,numberOfFeatures],name='Features_values')
y_=tf.placeholder(tf.float32,[None,numberOFclasses],name='predictions')
#Weights initialization
def weight_variable(shape):
return tf.Variable(tf.truncated_normal(shape,stddev=0.1))
def bias_variable(shape):
return tf.Variable(tf.constant(0.1,shape=shape))
# define variable summaries
def variable_summaries(var):
with tf.name_scope('summaries'):
mean = tf.reduce_mean(var)
tf.summary.scalar('mean',mean)
with tf.name_scope('stddev'):
stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
tf.summary.scalar('stddev', stddev)
tf.summary.scalar('max', tf.reduce_max(var))
tf.summary.scalar('min', tf.reduce_min(var))
tf.summary.histogram('histogram', var)
看看函數的文檔tf.truncated_normal我應該得到-0.1和+0.1左右的值,但事實並非如此,你可以看到如下
所以我的問題是我在這里缺少什么?
提前致謝 !
根據文件 :
丟棄並重新選擇其大小超過平均值2個標准偏差的值。
使用tf.truncated_normal(shape,stddev=0.1)
,標准偏差為0.1
,平均值為默認值0
。 因此,您只能獲得介於-0.2
和+ 0.2
之間的數字(因為0.2
是兩個標准偏差)。
如果您想知道為什么您的直方圖圖像看起來好像有高於+0.2
且低於-0.2
樣本,原因與TensorBoard如何根據您的數據創建直方圖有關 :
TensorFlow [...]不會創建整數二進制位。 [...]相反,這些垃圾箱呈指數級分布,許多垃圾箱接近0,而非常大的數量垃圾箱相對較少。 [...]可視化指數分布式箱是棘手的; [...]相反,直方圖將數據重新采樣為均勻的箱。 在某些情況下,這可能會導致不幸的偽影。
因此,這些直方圖是數據粗略分布的良好指示,但有時您可能想要創建自己的可視化或指標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.