Как исправить форму ввода Keras в 3D-массив

У меня есть модель Keras, которая, когда я подхожу, терпит неудачу с этой ошибкой

> kerasInput = Input(shape=(None, 47))
> LSTM(..)(kerasInput)
...
> model.fit(realInput, ...)
ValueError: Error when checking input: expected input_1 to have 3 dimensions, but got array with shape (10842, 1)

Посмотрев на свой ввод, я обнаружил, что он имеет форму (10842, 1), но для каждой строки это фактически список списка. Я могу проверить с

> pd.DataFrame(realInput[0]).shape
(260, 47)

Как мне исправить форму ввода?

При попытке со слоем keras Reshape создание модели завершается ошибкой:

Model inputs must come from `keras.layers.Input` (thus holding past layer metadata), they cannot be the output of a previous non-Input layer. Here, a tensor specified as input to your model was not an Input tensor, it was generated by layer reshape_8.
Note that input tensors are instantiated via `tensor = keras.layers.Input(shape)`.
The tensor that caused the issue was: reshape_8/Reshape:0

Какую модель вы используете? Вы случайно не используете LSTM?

Wazaki 14.10.2018 17:31

да, у меня есть слой LSTM, который обрабатывает ввод

bachr 14.10.2018 17:35

LSTM принимает 3-мерный ввод формы (размер_пакета, длина_последовательности, размер_функции). Что представляет ваш входной массив?

Wazaki 14.10.2018 17:40

Я знаю, дело в том, что я преобразовываю строковый столбец в массив массивов. Как показано выше, строки имеют хорошую форму, но затем, когда я передаю их в качестве входных данных, подгонка модели не выполняется.

bachr 14.10.2018 17:42

Я предполагаю, что вам нужно изменить форму ваших данных, чтобы они соответствовали трехмерному формату, прежде чем вводить их в качестве входных данных. Кроме того, для input_shape это должен быть двумерный вектор (timesteps, number_of_features).

Wazaki 14.10.2018 17:46
1
5
4 800
2

Ответы 2

  1. Вы можете использовать метод numpy.expand_dims для преобразования формы в 3D.

    import numpy as np
    
    np.expand_dims(realInput,axis=0)
    
  2. Изменить форму слоя кераса

    https://keras.io/layers/core/#reshape

  3. Используйте третий параметр как 1

    # Something Similar to this
    X_train = np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))
    

Обновлено: добавлен метод np.reshape

Обратитесь к этому репозиторию: https://github.com/NilanshBansal/Stock_Price_Prediction/blob/master/Stock_Price_Prediction_20_days_later_4_LSTM.ipynb

Я обновил пост выше с ошибкой при использовании Reshape

bachr 14.10.2018 17:38

Я что-то решил, я пытаюсь использовать ваши советы для начала работы, я проголосовал за, но обязательно приму, как только решу проблему.

bachr 14.10.2018 18:11

Как я уже говорил в комментариях. Вам нужно будет изменить форму ваших данных в соответствии с тем, что LSTM ожидает получить, а также убедитесь, что input_shape правильно установлен.

Я нашел этот пост очень полезным, когда я боролся с вводом в слой LSTM. Надеюсь, вам это тоже поможет: Изменить форму ввода для LSTM

Другие вопросы по теме