我有一个使用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左右的值,但事实并非如此,如您所见

python -  tensorflow 中的权重初始化-LMLPHP

所以我的问题是我在这里想念的是什么?

提前致谢 !

最佳答案

根据documentation


  幅度大于均值2个标准偏差的值将被删除并重新选择。


使用tf.truncated_normal(shape,stddev=0.1)时,标准偏差为0.1,平均值为默认值0。因此,您只会得到-0.2和+ 0.2之间的数字(因为0.2是两个标准偏差)。

如果您想知道为什么直方图图像看起来好像在+0.2上方和-0.2下方也有采样,则原因与how TensorBoard creates histograms from your data有关:


  TensorFlow不会创建整数仓。 [...]相反,垃圾箱是指数分布的,许多垃圾箱接近于0,相对数量很少的垃圾箱却具有非常大的数量。 [...]可视化指数分布的垃圾箱非常棘手; [...]直方图将数据重新采样到统一的bin中。在某些情况下,这可能会导致不幸的伪影。


因此,这些直方图很好地表明了数据的粗略分布,但是有时您可能需要创建自己的可视化效果或指标。

关于python - tensorflow 中的权重初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48000248/

10-12 22:24
查看更多