Использование TimeDistributed и Dense
Следующий код представляет собой объяснение, данное в keras:
# as the first layer in a model
model = Sequential()
model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))
# now model.output_shape == (None, 10, 8)
Как видно из приведенного выше кода,Распределенное и плотное времяПри совместном использовании он в основном используется в ситуациях «один ко многим» и «многие ко многим». input_shape = (10,16), что указывает на то, что размер шага равен 10, а размер каждого шага равен 16 (т. е. длина атрибута каждых данных равна 16))
Сначала используйте TimeDistributed(Dense(8), input_shape = (10,16)) для изменения размера каждого шага с 16 до 8 без изменения размера шага.
Если форма пакетного ввода этого слоя тогда (50, 10, 16), то выход после этого слоя (50, 10, 8)
2. Использование RepeatVector Это объяснение, данное на официальном сайте keras
model = Sequential()
model.add(Dense(32, input_dim=32))
# now: model.output_shape == (None, 32)
# note: `None` is the batch dimension
model.add(RepeatVector(3))
# now: model.output_shape == (None, 3, 32)
Объяснение: если форма ввода (Нет, 32), после добавления слоя RepeatVector(3) вывод становится (Нет, 3, 32), RepeatVector не меняет размер нашего шага, но изменяет размер каждого шага. (т.е. длина атрибута)