我们如何在Keras训练RNN后获得体重?

时间:2018-04-14 00:27:09

标签: neural-network deep-learning keras lstm rnn

我在Keras训练了一个RNN。现在,我想获得训练重量的值:

model = Sequential() 
model.add(SimpleRNN(27, return_sequences=True , input_shape=(None, 27), activation = 'softmax'))<br>
model.compile(loss='categorical_crossentropy',
          optimizer='rmsprop',
          metrics=['accuracy'])
model.get_weights()

这为我提供了2个形状(27,27)数组和1个形状(27,1)数组。我没有得到这些数组的含义。另外,我应该再获得2个形状(27,27)(27,1)的数组,它们将计算隐藏状态&#39; a&#39;激活。我怎样才能获得这些权重?

1 个答案:

答案 0 :(得分:1)

model.get_weights()返回的数组直接对应SimpleRNNCell使用的权重。它们包括:

  • kernel大小为(input_shape[-1], units)的矩阵。在您的情况下,input_shape=(None, 27)units=27,所以它是(27, 27)。内核乘以input
  • recurrent_kernel大小为(units, units)的矩阵,也恰好是(27, 27)。该矩阵乘以前一个状态。
  • 形状(units,) == (27,)的偏向数组。

这些数组对应于标准公式:

# W = kernel
# U = recurrent_kernel
# B = bias
output = new_state = act(W * input + U * state + B)

请注意,keras实现使用单个偏置向量,因此总共有三个数组。