Вопрос
Как выполнить пакетную подготовку многоэтапного LSTM в Керасе для одноклассовой многоклассовой классификации, на каждом временном шаге для> 2 классов?
Текущая ошибка
Каждая целевая партия представляет собой 3-мерный массив с формой (batch_size, n_time_steps, n_classes)
, но Keras ожидает 2-мерный массив.
Пример /Контекст
Предположим, у нас есть ежедневные цены закрытия для N акций и для каждого дня и акций: m функций и одно из трех действий: «куплено», «проведено», «продано».Если на запас имеется 30 дней данных, мы можем обучить LSTM прогнозировать каждое действие (на каждый день для каждой акции) следующим образом.
Для каждой партии выборок размером n << N,<code>X_train будет иметь форму (n, 30, m)
, то есть n
сэмплов, 30 временных шагов и m
функций.После горячего кодирования «куплено», «проведено» и «продано» Y_train
будет иметь форму (n, 30, 3)
, представляющую собой массив из 3-х измерений.
Проблема в том, что Kerasвыдает ошибку из-за ожидания, что Y_train
будет двумерным.
Вот фрагмент кода:
n_time_steps = 30
n_ftrs = 700
n_neurons = 100
n_classes = 3
batch_size = 256
n_epochs = 500
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(n_time_steps, n_ftrs)))
model.add(Dense(n_classes, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam',
metrics=['accuracy'])
for e in range(n_epochs):
X_train, Y_train = BatchGenerator()
# Y_train.shape = (256, 30, 3)
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=1)
Ошибка
Error when checking target: expected dense_20 to have 2 dimensions,
but got array with shape (256, 30, 3)