У меня есть многозадачная модель Keras LSTM, которая выполняет две задачи.Одним из них является задача тегирования последовательности (поэтому я предсказываю метку для каждого токена).Другой - глобальная классификационная задача по всей последовательности с использованием CNN, которая сложена в скрытых состояниях LSTM.
В моей настройке (не спрашивайте, почему) мне нужно только задание CNN во время обучения,но метки, которые он предсказывает, бесполезны для конечного продукта.Таким образом, на Keras можно обучить модель LSTM без указания длины входной последовательности.как это:
l_input = Input(shape=(None,), dtype="int32", name=input_name)
Однако, если я добавлю CNN, сложенный в скрытых состояниях LSTM, мне нужно будет установить фиксированную длину последовательности для модели.
l_input = Input(shape=(timesteps_size,), dtype="int32", name=input_name)
Проблема в том, чтокак только я обучил модель с фиксированным значением timestep_size, я больше не могу использовать ее для прогнозирования более длинных последовательностей.
В других средах это не проблема.Но в Керасе я не могу избавиться от CNN и изменить ожидаемую форму ввода модели после ее обучения.
Вот упрощенная версия модели
l_input = Input(shape=(timesteps_size,), dtype="int32")
l_embs = Embedding(len(input.keys()), 100)(l_input)
l_blstm = Bidirectional(GRU(300, return_sequences=True))(l_embs)
# Sequential output
l_out1 = TimeDistributed(Dense(len(labels.keys()),
activation="softmax"))(l_blstm)
# Global output
conv1 = Conv1D( filters=5 , kernel_size=10 )( l_embs )
conv1 = Flatten()(MaxPooling1D(pool_size=2)( conv1 ))
conv2 = Conv1D( filters=5 , kernel_size=8 )( l_embs )
conv2 = Flatten()(MaxPooling1D(pool_size=2)( conv2 ))
conv = Concatenate()( [conv1,conv2] )
conv = Dense(50, activation="relu")(conv)
l_out2 = Dense( len(global_labels.keys()) ,activation='softmax')(conv)
model = Model(input=input, output=[l_out1, l_out2])
optimizer = Adam()
model.compile(optimizer=optimizer,
loss="categorical_crossentropy",
metrics=["accuracy"])
IХотелось бы узнать, сталкивался ли кто-нибудь здесь с этой проблемой, и есть ли какие-либо решения для удаления слоев из модели после обучения и, что более важно, как изменить размеры входных слоев после обучения.
Спасибо