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

Neural network 在Keras训练RNN后,我们如何获得体重?,neural-network,deep-learning,keras,lstm,rnn,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',

我在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()
model=Sequential()
添加(SimpleRN(27,返回序列=True,输入形状=(无,27),激活='softmax'))
model.compile(loss='classifical_crossentropy', 优化器='rmsprop', 指标=[‘准确度’]) model.get_weights()

这给了我两个shape
(27,27)
数组和一个shape
(27,1)
数组。我不明白这些数组的含义。此外,我还应该得到另外两个shape
(27,27)
(27,1)
数组,它们将计算隐藏状态“a”的激活。如何获取这些权重?

model.get_weights()返回的数组直接对应于所使用的权重。这些措施包括:

  • 大小为
    内核
    矩阵(输入\u形[-1],单位)
    。在您的例子中,
    input_shape=(None,27)
    units=27
    ,因此它是
    (27,27)
    。内核与
    输入相乘
  • 大小为
    (单位,单位)
    循环\u内核
    矩阵,也恰好是
    (27,27)
    。此矩阵与前一状态相乘
  • 形状的偏移数组
    (单位,)==(27,)
这些数组对应于标准公式:

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

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

要计算输出,我们必须将新的_状态与输出_内核和输出_偏差相乘。Output=act(Out_kernel*new_state+By),因此,我们应该总共有3个大小的内核(27,27)和2个大小的偏差(27,1),这不是简单RNN单元的工作方式。答案中有正确的公式。唯一拥有3个以上参数数组的库是pytorch,它们使用两个偏置向量和两个内核。Keras使用单个偏置矢量。见本讨论: