Настройка параметров на LSTM и CuDNNLSTM в Керасе - PullRequest
0 голосов
/ 29 марта 2020

Я начал изучать Керас и пришел в замешательство с LSTM. Я не понимаю, каковы входные параметры, такие как первый параметр, который входит в скобки (n) и input_shape.

Мой набор данных имеет цифры c, в нем 30 столбцов, 29 объектов и 1 выводится (1 и 0).

DataFrame shape (23991, 30)
x_train shape (19192, 29)
y_train shape (19192,)
x_test shape (4799, 29)
y_test shape (4799,)

Исходя из этого, как должны выглядеть параметры в моих слоях?

Первый:

model = Sequential()
model.add(LSTM((?), input_shape = ?, return_sequences = ?, activation = ?))
model.add(Dropout(0.01))
model.add(Dense(1, activation='sigmoid')) 

Второй:

model = Sequential()
model.add(LSTM((?), input_shape = ?, return_sequences = ?, activation = ?))
model.add(LSTM((?), input_shape = ?, return_sequences = ?, activation = ?))
model.add(Dropout(0.01))
model.add(Dense(1, activation='sigmoid')) 

Являются ли эти параметры одинаковыми, если я использую, например, CuDNNLSTM?

1 Ответ

1 голос
/ 29 марта 2020
x_train shape (19192, 29)
y_train shape (19192,)
x_test shape (4799, 29)
y_test shape (4799,)

Если у вас есть pandas фрейм данных, преобразуйте их в массив numpy.

x_train = x_train.to_numpy()
y_train = y_train.to_numpy()

x_test = x_test.to_numpy()
y_test = y_test.to_numpy()

Сначала вам необходимо изменить данные.

x_train = x_train.reshape(19192, 29, 1)
y_train = y_train.reshape(19192,1)
x_test = x_test.reshape(4799, 29, 1)
y_test = y_test.reshape(4799,1)

Теперь, обычно для размеров LSTM:

0 - Samples. One sequence is one sample. A batch is comprised of one or more samples.
1 - Time Steps. One time step is one point of observation in the sample.
2 - Features. One feature is one observation at a time step.

Итак, в третьем 1 мы добавляем измерение, соответствующее объектам.

Форма ввода LSTM будет (29,1) (29 = временные шаги, 1 = количество объектов на временную последовательность (также для простоты вы можете думать об этом как о количестве каналов, как в CNN)

model = Sequential()
model.add(LSTM(units = 10, input_shape = (29,1), return_sequences = False)) # keep other parameters default if you're not sure
model.add(Dropout(0.01))
model.add(Dense(1, activation='sigmoid')) 

Заметьте, мы добавляем return_srquence = True для первого слоя, но для второго слоя LSTM этого не происходит. Причина в том, что LSTM нужны трехмерные данные (партия, время, объекты), а Dense нужны двумерные данные (партия, функции), когда мы видим return_sequence = True, мы отправляем 3D-данные на следующий слой для Dense, вместо этого мы отправляем 2D-данные.

model = Sequential()
model.add(LSTM(units = 10, input_shape = (29,1), return_sequences = True))
model.add(LSTM(units = 10, return_sequences = False))
model.add(Dropout(0.01))
model.add(Dense(1, activation='sigmoid')) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...