TF Keras: ValueError: Вход 0 последовательного слоя несовместим со слоем: ожидаемый ndim = 3, найденный ndim = 2

Итак, у меня есть последовательности 2D-векторов, которые образуют шаблоны. Я хочу предсказать, как будет развиваться последовательность. У меня есть массив start_xy, состоящий из массивов с порядком, start_x и start_y: например. [1, 2.4, 3.8] и то же самое для end_xy.

Я хочу обучить модель модели прогнозирования последовательности:

import numpy as np
import pickle
import keras
from keras.models import Sequential
from keras.layers import LSTM, Dense
from keras.callbacks import ModelCheckpoint
import training_data_generator
tdg = training_data_generator.training_data_generator(500)
trainingdata = tdg.produceTrainingSequences()
print("Printing DATA!:")
start_xy =[]
end_xy =[]

for batch in trainingdata:
    for pattern in batch:
        order = 1
        for sequence in pattern:
            start = [order,sequence[0],sequence[1]] 
            start_xy.append(start)
            end = [order,sequence[2],sequence[3]]
            end_xy.append(end)
            order = order +1

    
    model = Sequential()
    model.add(LSTM(64, return_sequences=False, input_shape=(2,len(start_xy))))
    model.add(Dense(2, activation='relu'))
    model.compile(loss='mse', optimizer='adam')
    model.fit(start_xy,end_xy,batch_size=len(start_xy), epochs=5000,  verbose=2)

Но я получаю сообщение об ошибке:

 ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [320, 3]

Я подозреваю, что мне нужно как-то изменить форму ввода, но я пока не понимаю, как это сделать. Как мне заставить это работать? Я вообще все делаю правильно?


person Sandra Peters    schedule 14.08.2020    source источник
comment
Не могли бы вы опубликовать полный код с набором данных в google colab или github, чтобы я мог его отладить. Я хочу увидеть, какова форма вводимых вами данных и какова ваша конечная цель.   -  person pratsbhatt    schedule 15.08.2020
comment
Я разместил свой код на странице github.com/mylittlemachinelearning/sequenceprediction   -  person Sandra Peters    schedule 15.08.2020


Ответы (1)


В основном вам просто нужно преобразовать свои данные в массивы numpy и немного изменить эти данные, чтобы модель их приняла.

Сначала преобразуйте start_xy в массив numpy и измените его так, чтобы он имел 3 тусклости:

start_xy = np.array(start_xy)
start_xy = start_xy.reshape(*start_xy.shape, 1)

Затем исправьте входную форму для слоя LSTM как [3, 1]:

model.add(LSTM(64, return_sequences=False, input_shape=start_xy.shape[1:]))

Let me know if the error persists or if another one comes up!
person Leon Shams    schedule 15.08.2020
comment
Это решило мою первоначальную проблему, так что это определенно решение этой проблемы :-) С другой стороны, теперь я получаю Не удалось найти адаптер данных, который может обрабатывать ввод: ‹class 'numpy.ndarray'›, (‹class 'list'› содержащий значения типов {'(‹class \' list \ '› содержащие значения типов {‹class \' int \ '›, ‹class \' numpy.float64 \ '›})'}), но это другой вопрос - person Sandra Peters; 15.08.2020