关于初始化的问题
来源:8-19 计算图构建-rnn结构实现、损失函数与训练算子实现
wxz123
2019-05-28
scale = 1.0 / math.sqrt(hps.num_embedding_nodes + hps.num_lstm_nodes[-1]) / 3.0
lstm_init = tf.random_uniform_initializer(-scale, scale)
with tf.variable_scope(‘lstm_nn’, initializer=lstm_init):
cells = []
for i in range(hps.num_lstm_layers):
cell = create_rnn_cell(hps.num_lstm_nodes[i], hps.cell_type)
cell = dropout(cell, keep_prob)
cells.append(cell)
cell = tf.contrib.rnn.MultiRNNCell(cells)
第一行中scale = 1.0 / math.sqrt(hps.num_embedding_nodes + hps.num_lstm_nodes[-1]) / 3.0 的这个 3.0是任何情况下进行初始化时一个固定的常数,还是它有什么具体的含义(不同的情况变成不同的值吗)
1回答
-
同学你好,很细心你能发现这个问题,这里的initializer的实现其实我是想实现glorot或者he initializer。但是我没有实现对,公式应该是 sqrt(6/(fan_in + fan_out)), 或者可以使用tf.glorot_uniform_initializer.
这里的3.0没有具体意义哈。
012019-07-06
相似问题