LSTM в Keras: количество параметров отличается между последовательным и функциональным API - PullRequest
0 голосов
/ 11 октября 2018

с последовательным API

Если я создам LSTM с последовательным API-интерфейсом Keras со следующим кодом:

from keras.models import Sequential
from keras.layers import LSTM

model = Sequential()
model.add(LSTM(2, input_dim=3))

затем

model.summary()

возвращает 48 параметров, что нормально, как указано в в этом вопросе переполнения стека .

model.summary() with the Sequential API

Краткие сведения:

input_dim = 3, output_dim = 2
n_params = 4 * output_dim * (output_dim + input_dim + 1) = 4 * 2 * (2 + 3 + 1) = 48

С функциональным API

Но если я сделаю то же самое с функциональным API со следующим кодом:

from keras.models import Model
from keras.layers import Input
from keras.layers import LSTM

inputs = Input(shape=(3, 1))
lstm = LSTM(2)(inputs)
model = Model(input=inputs, output=lstm)

затем

model.summary()

возвращает 32 параметров.

model.summary() with the Functional API

Почему такая разница?

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Я решил это следующим образом:

Case 1:
m (input) = 3
n (output) = 2

params = 4 * ( (input * output) + (output ^ 2) + output)
       = 4 * (3*2 + 2^2 + 2)
       = 4 * (6 + 4 + 2)
       = 4 * 12
       = 48



Case 2:
m (input) = 1
n (output) = 2

params = 4 * ( (input * output) + (output ^ 2) + output)
       = 4 * (1*2 + 2^2 + 2)
       = 4 * (2 + 4 + 2)
       = 4 * 8
       = 32
0 голосов
/ 11 октября 2018

Разница в том, что когда вы передаете input_dim=x слою RNN, включая слои LSTM, это означает, что входная форма равна (None, x), т. Е. Существует различное количество временных шагов, где каждый из них является вектором длины x,Однако в примере с функциональным API вы указываете shape=(3, 1) в качестве формы ввода, и это означает, что есть 3 шага, каждый из которых имеет одну особенность.Поэтому число параметров будет: 4 * output_dim * (output_dim + input_dim + 1) = 4 * 2 * (2 + 1 + 1) = 32, то есть число, указанное в сводке модели.

Далее, если вы используете Keras 2.xx, вы получите предупреждение в случае использования аргумента input_dimдля слоя RNN:

UserWarning: Аргументы input_dim и input_length в повторяющихся слоях устарели.Вместо этого используйте input_shape.

Предупреждение пользователя: Обновите ваш LSTM вызов API Keras 2: LSTM(2, input_shape=(None, 3))

...