在https://keras.io/layers/recurrent/上,我看到LSTM层具有kernel
和recurrent_kernel
。它们是什么意思?以我的理解,我们需要一个LSTM单元的4个门的权重。但是,在keras实现中,kernel
的形状为(input_dim,4 * units),recurrent_kernel
的形状为(units,4 * units)。那么,他们两个都以某种方式实现了大门吗?
答案 0 :(得分:2)
如果我错了,请纠正我,但是如果您看一下LSTM方程式:
您有4个转换输入的 W 矩阵和4个转换隐藏状态的 U 矩阵。
Keras将这4组矩阵保存到kernel
和recurrent_kernel
权重数组中。来自the code that uses them:
self.kernel_i = self.kernel[:, :self.units]
self.kernel_f = self.kernel[:, self.units: self.units * 2]
self.kernel_c = self.kernel[:, self.units * 2: self.units * 3]
self.kernel_o = self.kernel[:, self.units * 3:]
self.recurrent_kernel_i = self.recurrent_kernel[:, :self.units]
self.recurrent_kernel_f = (
self.recurrent_kernel[:, self.units: self.units * 2])
self.recurrent_kernel_c = (
self.recurrent_kernel[:, self.units * 2: self.units * 3])
self.recurrent_kernel_o = self.recurrent_kernel[:, self.units * 3:]
显然,这四个矩阵存储在沿第二维连接的权重数组中,这解释了权重数组的形状。