глубокое обучение (lstm) с кератами и переменным размером входов - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь реализовать модель lstm с помощью keras. Проблема в том, что у меня есть данные разных форм. Мои данные выглядят так:

col1 col2 col3 col4 col5

[1,2,3] [2,3,4] [3,4,5] [5,6,7] [4,5,9]

[0,2] [1,5] [1,24] [11,7] [-1,4]

[0,2,4,5] [1,5,7,8] [1,24, -7,6] [11,7,4,5] [-1,4,1,2]

Мой код

import numpy as np
import pandas as pd
import h5py
from sklearn.model_selection import train_test_split
from keras.layers import Dense
from keras.layers import Input, LSTM
from keras.models import Model

X_train, X_test, y_train, y_test = train_test_split(X, y_target, test_size=0.2, random_state=1)  
batch_size = 32 
timesteps = 300 
output_size = 1
epochs=120

inputs = Input(batch_shape=(batch_size, timesteps, output_size))
lay1 = LSTM(10, stateful=True, return_sequences=True)(inputs)
lay2 = LSTM(10, stateful=True, return_sequences=True)(lay1)
output = Dense(units = output_size)(lay2)

regressor = Model(inputs=inputs, outputs = output)
regressor.compile(optimizer='adam', loss = 'mae')
regressor.summary()

for i in range(epochs):
    print("Epoch: " + str(i))
    regressor.fit(X_train, y_train, shuffle=False, epochs = 1, batch_size = batch_size)
    regressor.reset_states()

Ошибка при запуске кода:

ValueError: Error when checking input: expected input_5 to have 3 dimensions, but got array with shape (11200, 5) #11200 lines, 5 columns

Спасибо

1 Ответ

0 голосов
/ 14 мая 2018

Многомерный массив NumPy должен иметь четкую форму, поэтому размещение массива разной длины внутри одного и того же NUMPY массива приведет к созданию NUMPY массива объектов вместо требуемого многомерного массива.

Так что в принципе невозможно передать ваши данные в керас за один раз.

Однако есть несколько возможных решений. Большинство из них требуют, чтобы входная форма вашей керасы была равна None в вашем измерении временного шага:

  1. Используйте отступы, чтобы ваши данные всегда имели одинаковую форму
  2. поезд с размером партии = 1
  3. Сортировка данных по партиям таким образом, чтобы внутри каждой партии каждая выборка имела одинаковую форму.

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

...