Я создаю сеть «многие ко многим» в Керасе, используя LSTM. У меня есть последовательности разной длины (метки всегда имеют ту же длину, что и последовательность, которую они описывают). Чтобы справиться с разной длиной и после поиска в других сообщениях SO, я нашел, что заполнение + маскирование является лучшим решением.
Это моя модель:
Итак, у меня есть n (874) образцов дополненных последовательностей max_len (24) с 25 функциями в каждой. Но как мне обращаться со своими этикетками? Я их тоже подкладываю?
Если я дополню их так же, как мой X (с тем же специальным значением), я получу следующее:
Форма X_train: (873, 24, 25)
Форма y_train: (873 , 24)
Все в порядке, за исключением того, что я получаю следующую ошибку: ValueError: Can not squeeze dim[1], expected a dimension of 1, got 24 for '{{node binary_crossentropy/weighted_loss/Squeeze}} = Squeeze[T=DT_FLOAT, squeeze_dims=[-1]](Cast_1)' with input shapes: [1,24].
Поиск этой ошибки приводит к публикации сообщения об удалении retun_sequences=True
из моего слоя LSTM, за исключением того, что я не хочу, чтобы, поскольку каждый из моих временных шагов помечен ...
И если я не добавлю их, они не могут быть преобразованы в тензор, который будет использоваться тензорным потоком.
Изменить:
Пояснительная иллюстрация архитектуры, которую я хочу достичь, благодаря этому ответу: { ссылка }