Tensorflow 中 LSTM 层的门权重顺序
Gate weights order for LSTM layers in Tensorflow
我有一个包含一些 LSTM 层的 Keras 模型。我知道我可以通过 get_weights()
方法获取 LSTM 层的权重,结果是一个由三个元素组成的列表:核、递归核和偏差。
如文档所述,每个元素都包含 LSTM 层中 4 个门的权重。但是,它没有说明它们的存储顺序。例如,如果 LSTM 层有 N 个单元,则偏置向量将由 4*N 个元素组成。这些元素中的哪一个对应于第 1/2/3/4 门?
顺序为i, f, c, o
,分别代表输入门、遗忘门、单元门和输出门。您可以从 LSTMCell
实现 here.
中获取信息
lstm = LSTM(100)
lstm(np.zeros((64,10,5)))
kernel = lstm.weights[0]
w_i,w_f,w_c,w_o = tf.split(kernel,4,axis=1)
print(*(w.shape for w in (w_i,w_f,w_c,w_o)))#all are (5, 100)
我有一个包含一些 LSTM 层的 Keras 模型。我知道我可以通过 get_weights()
方法获取 LSTM 层的权重,结果是一个由三个元素组成的列表:核、递归核和偏差。
如文档所述,每个元素都包含 LSTM 层中 4 个门的权重。但是,它没有说明它们的存储顺序。例如,如果 LSTM 层有 N 个单元,则偏置向量将由 4*N 个元素组成。这些元素中的哪一个对应于第 1/2/3/4 门?
顺序为i, f, c, o
,分别代表输入门、遗忘门、单元门和输出门。您可以从 LSTMCell
实现 here.
lstm = LSTM(100)
lstm(np.zeros((64,10,5)))
kernel = lstm.weights[0]
w_i,w_f,w_c,w_o = tf.split(kernel,4,axis=1)
print(*(w.shape for w in (w_i,w_f,w_c,w_o)))#all are (5, 100)