针对RNN的Keras get_weight解释

时间:2017-07-14 07:31:54

标签: neural-network keras recurrent-neural-network rnn

当我使用Keras运行此代码时:

networkDrive = Input(batch_shape=(1,length,1))
network = SimpleRNN(3, activation='tanh', stateful=False, return_sequences=True)(networkDrive)

generatorNetwork = Model(networkDrive, network)

predictions = generatorNetwork.predict(noInput, batch_size=length)


print(np.array(generatorNetwork.layers[1].get_weights()))

我收到了这个输出

[array([[ 0.91814435,  0.2490257 ,  1.09242284]], dtype=float32)
 array([[-0.42028981,  0.68996912, -0.58932084],
       [-0.88647962, -0.17359462,  0.42897415],
       [ 0.19367599,  0.70271438,  0.68460363]], dtype=float32)
 array([ 0.,  0.,  0.], dtype=float32)]

我想,(3,3)矩阵是权重矩阵,将RNN单元相互连接,两个阵列中的一个可能是偏差 但第三个是什么?

1 个答案:

答案 0 :(得分:1)

在simpleRNN实现中,确实需要3组权重。

weights[0]是输入矩阵。它会转换输入,因此形状为[input_dim, output_dim]

weights[1]是recurent矩阵。它转换了循环状态,形状为[output_dim, output_dim]

weights[2]是偏差矩阵。它被添加到输出中并具有形状[output_dim]

将三个操作的结果相加,然后通过激活层。

我希望现在更清楚了吗?