我正在尝试在TensorFlow中创建一个模型。但是权重初始化似乎是错误的,但我不明白为什么。因此,我的模型有一个以Sigmoid作为激活函数的隐藏层,而输出层使用softmax。我也使用Xavier。因此,要初始化权重,我使用:
hidden_layer = tf.Variable(tf.random_normal([input_size, hid_size], stddev=0.01)) * np.sqrt(1./input_size)
output_layer = tf.Variable(tf.random_normal([hid_size, output_size], stddev=0.01)) * np.sqrt(1./hid_size)
给出标准偏差。
您看到有什么问题吗?
答案 0 :(得分:0)
tensorflow将声明处理为图形,因此实际上没有像 * np.sqrt(1./input_size)
您可以删除尾部* np.sqrt(1./input_size)并添加新行
inputsqrt = tf.placeholder(tf.float)
hidden = hidden_layer*inputsqrt
与输出相同的句柄
答案 1 :(得分:0)
如果您使用的是Xavier,则应考虑使用Xavier初始化程序,有关文档,请参见https://www.programiz.com/python-programming/methods/built-in/slice。
hidden_layer = tf.get_variable("w1", shape=[input_size, hid_size], initializer=tf.contrib.layers.xavier_initializer())
output_layer = tf.get_variable("w2", shape=[hid_size, output_size], initializer=tf.contrib.layers.xavier_initializer())