Проблема с размерностью массива

У меня есть датафрейм:

index     A       B      C        D       E       F      G
    0   16326   3745    2571    96211   17771   491216  811 2020-05-11
    1   16921   3978    2648    96062   18009   507778  839 2020-05-12
    2   17204   4188    2538    96708   18256   528122  861 2020-05-13
    3   17615   4368    2579    95068   18363   554357  883 2020-05-14
    4   18016   4608    2407    90386   18355   576276  907 2020-05-15
    5   18257   4712    2459    84542   18195   601394  915 2020-05-16
    6   18529   4865    2544    80947   18772   620249  925 2020-05-17
    7   18885   5132    2490    76645   18831   636046  936 2020-05-18
    8   19268   5269    2414    76957   18984   653224  948 2020-05-19
    9   19739   5409    2330    77461   19729   674861  962 2020-05-20

Я хочу с помощью многослойного перцептрона предсказать 10 несуществующую строку ( конечно же без последней колонки). Сначала преобразовываю данные:

list_=[] 

for index, rows in data.iterrows(): 
    my_list =[rows.A, rows.B, rows.C, rows.D, rows.E,
              rows.F, rows.G] 
    list_.append(my_list) 

# Print the list 
print(list_)

Выход:

[[16326, 3745, 2571, 96211, 17771, 491216, 811], [16921, 3978, 2648, 96062, 18009, 507778, 839], [17204, 4188, 2538, 96708, 18256, 528122, 861], [17615, 4368, 2579, 95068, 18363, 554357, 883], [18016, 4608, 2407, 90386, 18355, 576276, 907], [18257, 4712, 2459, 84542, 18195, 601394, 915], [18529, 4865, 2544, 80947, 18772, 620249, 925], [18885, 5132, 2490, 76645, 18831, 636046, 936], [19268, 5269, 2414, 76957, 18984, 653224, 948], [19739, 5409, 2330, 77461, 19729, 674861, 962]]

Теперь разделяю данные на вход и выход. Логика следующая: первые 3 ряда таблицы - x, 4тый - y. Т.е. по первым трем дням получаю четвертый. Ну и все это сдвигаю:

x = []
y = []

for i in range(len(data)-3):
  x.append(list_[i:i+4][:-1])
  y.append(list_[i:i+4][-1:])

x = np.array(x)
y = np.array(y)

print(f'X-shape: {x.shape}, y-shape: {y.shape}')

Выход:

X-shape: (7, 3, 7), y-shape: (7, 1, 7)

Дальше создаю многослойный перцептрон:

model = Sequential()
model.add(Dense(100, activation='relu', input_dim=3))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

model.fit(x, y, epochs=500, verbose=0)

И получаю ошибку:

ValueError: Error when checking input: expected dense_148_input to have 2 dimensions, but got array with shape (7, 3, 7)

(7, 3, 7) означает, что у меня 7 трехдневных множеств, и каждое имеет 7 параметров. Как мне сделать, чтобы нейронная сеть принимал на входе мою размерность ?


Ответы (1 шт):

Автор решения: Данила Фоминых

Если я всё верно понял, то ваша модель должна по значениям из трех дней предсказать значения в четвертый день на определенной строке. Тогда в качестве входного значения X вы получаете матрицу [3х7], сделайте проще input_dim=x.shape[1:] - размерность первого примера в выборке.

А выход вам нужен другой совсем. Вам нужно 7 нейронов в выходном слое, если хотите предсказать 7 значений.

model.add(Dense(7, activation='relu'))

Попробуйте relu активацию в выходном слое, но не факт что это сработает.

→ Ссылка