【问题标题】:Weight initialization in tensorflow张量流中的权重初始化
【发布时间】:2017-12-28 09:42:11
【问题描述】:

我有一个使用 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


    【解决方案1】:

    根据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 [...] 不会创建整数 bin。 [...] 相反,这些 bin 呈指数分布,许多 bin 接近于 0,而对于非常大的数字,则相对较少的 bin。 [...] 可视化指数分布的 bin 很棘手; [...] 相反,直方图将数据重新采样到统一的 bin 中。在某些情况下,这可能会导致不幸的伪影。

    因此,这些直方图可以很好地指示数据的粗略分布,但有时您可能希望创建自己的可视化或指标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多