簡體   English   中英

張量流中的權重初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM