Keras get_weight 对 RNN 的解释
Keras get_weight interpretation for RNNs
当我 运行 使用 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单元相互连接起来,两个数组之一可能是偏差
但是第三个是什么?
在简单的 RNN 实现中,确实需要 3 组权重。
weights[0]
是输入矩阵。它转换输入,因此具有 [input_dim, output_dim]
的形状
weights[1]
是递归矩阵。它转换循环状态并具有 [output_dim, output_dim]
的形状
weights[2]
是偏置矩阵。它被添加到输出中并具有 [output_dim]
的形状
三个运算的结果相加,然后经过一个激活层。
我希望现在更清楚了吗?
当我 运行 使用 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单元相互连接起来,两个数组之一可能是偏差 但是第三个是什么?
在简单的 RNN 实现中,确实需要 3 组权重。
weights[0]
是输入矩阵。它转换输入,因此具有 [input_dim, output_dim]
weights[1]
是递归矩阵。它转换循环状态并具有 [output_dim, output_dim]
weights[2]
是偏置矩阵。它被添加到输出中并具有 [output_dim]
三个运算的结果相加,然后经过一个激活层。
我希望现在更清楚了吗?