我在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;激活。我怎样才能获得这些权重?
答案 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实现使用单个偏置向量,因此总共有三个数组。