我是使用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左右的值,但事实并非如此,正如你可以看到的那样
所以我的问题是我在这里失踪了什么?
提前谢谢!答案 0 :(得分:3)
其大小超过平均值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,而非常大的数量垃圾箱相对较少。 [...]可视化指数分布式箱是棘手的; [...]相反,直方图将数据重新采样为均匀的箱。在某些情况下,这可能会导致不幸的伪影。
因此,这些直方图很好地表明了数据的粗略分布,但有时您可能想要创建自己的可视化或指标。