ValueError: шаг должен быть длиной 1, 1 или 3, но был 2 - PullRequest
1 голос
/ 02 октября 2019

форма входа поезда: (13974, 100, 6, 5)

форма выхода поезда: (13974, 1,1)

форма входного теста: (3494, 100, 6,5)

Форма тестового вывода: (3494, 1, 1)

Я занимаюсь разработкой следующей модели. 2D CNN LSTM.

model = Sequential()
model.add(TimeDistributed(Conv2D(1, (1,1), activation='relu', 
input_shape=(6,5,1))))
model.add(TimeDistributed(MaxPooling2D(pool_size=(6, 5))))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(units=300, return_sequences= False, input_shape=(100,1)))
model.add(Dense(1))

, когда я пытаюсь соответствовать как следует

model.fit(train_input,train_output,epochs=50,batch_size=60)

, это выдает мне ошибку.

ValueError: шаги должны бытьдлины 1, 1 или 3, но было 2

, пожалуйста, исправьте мою модель. Я преобразую изображение 6,5 в одну единицу и прогнозирую 101-ую отметку времени из 100 отметок времени.

1 Ответ

0 голосов
/ 02 октября 2019

Ваш вопрос довольно неясен, но я считаю, что у вас есть последовательность из 100 изображений размером 6 x 5. Лучше включить Conv3D в свой вариант использования, а также нет необходимости иметь TimeDistributed везде. Это просто иллюстрация для вашего варианта использования, вам, возможно, придется добавить больше слоев Conv и MaxPool и поэкспериментировать с другими гиперпараметрами, чтобы получить хорошую подгонку.

# Add the channel dimension in input
train_input = np.expand_dims(train_input, -1)
# Remove the extra dimension in output
train_output = np.reshape(train_output, (-1, 1))

model = Sequential()
model.add(Conv3D(1, (1,1,1), activation='relu', input_shape=(100, 6,5, 1)))
model.add(MaxPooling3D(pool_size=(6, 5, 1)))
model.add(Reshape((16, 5)))
model.add(LSTM(units=300, return_sequences= False))
model.add(Dense(1))
...