#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)’ соответственно.