LSTM input_shape несовместим

Ниже приведено воспроизводимое решение, которое использует dplyr и встроенный набор данных mtcars.

Прогулка по коду: сначала создайте функцию is_outlier, которая вернет логическое значение TRUE/FALSE, если переданное ему значение является выбросом. Затем мы выполняем «анализ / проверку» и построим данные - сначала мы group_by нашу переменную (cyl в этом примере, в вашем примере это будет PortugesOutcome), и мы добавим переменную outlier в вызов mutate (если переменная drat является outlier [обратите внимание, что это соответствует RatioPort2Dutch в вашем примере], мы передадим значение drat, в противном случае мы вернем NA, чтобы значение не было график). Наконец, мы построим результаты и построим текстовые значения через geom_text и эстетическую метку, равную нашей новой переменной; кроме того, мы компенсируем текст (сдвинем его немного вправо) с помощью hjust, чтобы мы могли видеть значения рядом с точками outlier, а не поверх них.

library(dplyr)
library(ggplot2)

is_outlier <- function(x) {
  return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))
}

mtcars %>%
  group_by(cyl) %>%
  mutate(outlier = ifelse(is_outlier(drat), drat, as.numeric(NA))) %>%
  ggplot(., aes(x = factor(cyl), y = drat)) +
    geom_boxplot() +
    geom_text(aes(label = outlier), na.rm = TRUE, hjust = -0.3)

0
задан ninesalt 15 January 2019 в 21:38
поделиться

1 ответ

Слой Keras LSTM ожидает, что входной сигнал будет 3 тусклым, как (batch_size, seq_length, input_dims), но вы ошиблись. Попробуйте это

input_dims = train_x.shape[1]
seq_length = #decide an integer
model = Sequential()
 model.add(LSTM(128, activation='relu', input_shape=(seq_length, input_dims), return_sequences=True))

Также вам нужно изменить ваши данные на три dim, где новые dim будут представлять последовательность, как

Я использовал игрушечный набор данных, чтобы показать пример, здесь данные и метки изначально имеют форму ((150, 4), (150,)), используя следующий скрипт:

seq_length = 10
dataX = []
dataY = []
for i in range(0, 150 - seq_length, 1):
    dataX.append(data[i:i+seq_length])
    dataY.append(labels[i+seq_length-1])
import numpy as np
dataX = np.reshape(dataX, (-1, seq_length, 4))
dataY = np.reshape(dataY, (-1, 1))
# dataX.shape, dataY.shape

Вывод: ((140, 10, 4), (140, 1))

Теперь вы можете безопасно передать его модели.

Примечание: я подготовил набор данных для модели many-to-one, но вы можете использовать его соответствующим образом.

0
ответ дан Ankish Bansal 15 January 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: