Поправьте меня, если я ошибаюсь, но если вы посмотрите на уравнения LSTM:
У вас есть 4 W матриц, которые преобразуют входные данные, и 4 U матриц, которые преобразуют скрытое состояние.
Keras сохраняет эти наборы из 4 матриц в массивы kernel
и recurrent_kernel
. С код, который их использует :
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:]
Очевидно, что 4 матрицы хранятся в массивах весов, сцепленных по второму измерению, что объясняет формы массива весов.