Форма ввода / вывода Keras LSTM

#python-3.x #lstm #keras-layer #keyerror

#python-3.x #lstm #keras-слой #ошибка ключа

Вопрос:

Мне нужны выходные данные на каждом повторяющемся уровне, и моя настройка выглядит следующим образом:

100 обучающих примеров, 3 временных шага для каждого примера и 20-мерный вектор объектов для каждого отдельного элемента.

x_train: (100,3,20)

y_train: (100,20)

Архитектура LSTM:

 model.add(LSTM(20, input_shape=(3,20), return_sequences=True))
model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['accuracy'])
model.summary()
  

Обучение:

 history = model.fit(x_train, y_train, epochs=50, validation_data=(x_test, y_test))
  

Ошибка:

 ValueError: Dimensions must be equal, but are 20 and 3 for '{{node Equal}} = Equal[T=DT_FLOAT, incompatible_shape_error=true](IteratorGetNext:1, Cast_1)' with input shapes: [?,20], [?,3].
  

Пожалуйста, помогите мне с правильными размерами ввода / вывода LSTM.
Спасибо

Комментарии:

1. установите return_sequences=False (ваш вывод 2D) и обратите внимание на точность использования, это не показатель для проблем регрессии

2. @YOGEZSH KALAKOTI, пожалуйста, удалите приветствия. Следует ли удалять из сообщений «Привет», «спасибо», слоганы и приветствия?

Ответ №1:

LSTM(20, input_shape=(3,20), return_sequences=True) принимает в качестве формы ввода (100,3,20) и возвращает (100,3,20) . Однако ваш целевой вывод кодируется как (100,20) .

Исходя из размеров, я предполагаю, что вы хотите сопоставить каждую последовательность с непоследовательностью, т. Е. Вы можете сделать:

 LSTM(20, input_shape=(3,20), return_sequences=False)
  

Это вернет окончательное скрытое состояние, то есть форму (100,20) , которая соответствует вашему целевому результату.

Комментарии:

1. Привет, @runDOSrun, это должна быть модель seq2seq и (100, 3, 20)

2. Привет, runDOSrun, ‘LSTM(20, input_shape = (3,20), return_sequences =False)’ работает нормально. Но мне нужно построить модель seq2seq, в которой для входной формы ‘(100,3,20)’ я могу извлекать ‘y’ для каждого временного шага. Какие изменения вы бы предложили в моем коде? Мои данные похожи (предположим, что все слова имеют 20-d вставки) ‘(x, y): (кошка, собака, мышь, зебра)’ «‘(x, y): (собака, мышь, курица-зебра)»‘ Естественно, мои x_train и y_train будут ‘(3×20)’и ‘(20)’ соответственно.