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

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

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 ввода / вывода. Спасибо


person YOGESH KALAKOTI    schedule 24.09.2020    source источник
comment
установите return_sequences = False (ваш результат - 2D) и обратите внимание на точность использования, это не показатель для проблем регрессии   -  person Marco Cerliani    schedule 24.09.2020
comment
@YOGEZSH KALAKOTI, пожалуйста, убери приветствия. Привет, спасибо, слоганы , а приветствия убрать из сообщений?   -  person maciejwww    schedule 24.09.2020


Ответы (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), которая соответствует вашему целевому выводу.

person runDOSrun    schedule 24.09.2020
comment
Привет @runDOSrun, это должна быть модель seq2seq и (100, 3, 20) - person YOGESH KALAKOTI; 24.09.2020
comment
Привет, runDOSrun, LSTM (20, input_shape = (3,20), return_sequences = False) работает нормально. Но мне нужно построить модель seq2seq, в которой для входной формы '(100,3,20)' я могу извлекать 'y' для каждого временного шага. Какие изменения вы бы предложили в моем коде? Мои данные похожи на (Предположим, что все слова имеют 20-мерные вставки) '(x, y): (cat dog mouse, zebra)' '' '(x, y): (dog mouse zebra hen)' '' Естественно , мои x_train и y_train будут '(3x20)' и '(20)' соответственно. - person YOGESH KALAKOTI; 24.09.2020