У меня есть многомерный набор данных временных рядов с N элементами (размерами).Я строю модель CNN-LSTM, которая имеет N входных каналов (по одному на каждую функцию).Сначала модель должна выполнить одномерные свертки для каждого объекта, затем объединить выходные данные и передать их в слой LSTM.Однако у меня возникают проблемы с измерениями (я подозреваю, что это основная проблема), а именно объединенные выходные измерения не соответствуют ожидаемым.
Я пробовал Flatten () для каждой функции, но она возвращает (?,?) и Reshape (), похоже, тоже не справляются.
# Init the multichannel CNN-LSTM proto.
def mccnn_lstm(steps=window, feats=features, dim=1, f=filters, k=kernel, p=pool):
channels, convs = [], []
# Multichannel CNN layer
for i in range(feats):
chan = Input(shape=(steps, dim))
conv = Conv1D(filters=f, kernel_size=k, activation="tanh")(chan)
maxpool = MaxPooling1D(pool_size=p, strides=1)(conv) # Has shape (?, 8, 64)
flat = Flatten()(maxpool) # Returns (?, ?), not (?, 8*64) as expected
channels.append(chan)
convs.append(flat)
merged = concatenate(convs) # Returns (?, ?), would expect a tensor like (?, 8*64, num of channels)
# LSTM layer
lstm = TimeDistributed(merged)
lstm = LSTM(64)(merged) # This line raises the error
dense = Dense(1, activation="sigmoid")(lstm)
return Model(inputs=channels, outputs=dense)
model = mccnn_lstm()
Сообщение об ошибке:
ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=2
Я ожидаюобъединенный вывод из многоканального слоя должен иметь размеры (?, 8 * 64, количество каналов) или что-то подобное, что затем будет входом для слоя LSTM.