Я хочу добавить новые слои в предварительно обученную модель, используя Tensorflow и Keras. Проблема в том, что эти новые слои нужно добавлять не поверх модели, а в начале. Я хочу создать тройную сиамскую модель, которая принимает 3 разных входа и дает 3 разных выхода, используя предварительно обученную сеть в качестве ядра модели. Для этого мне нужно вставить 3 новых входных слоя в начале модели.
Путь по умолчанию будет состоять в том, чтобы просто связать слои и модель, но этот метод обрабатывает предварительно обученную модель как новый слой (когда создается новая модель с новыми входами и предварительно обученной моделью, новая модель содержит только 4 слоя, 3 входных слоя и всю предварительно обученную модель):
input_1 = tf.keras.layers.Input(shape = (224,224,3))
input_2 = tf.keras.layers.Input(shape = (224,224,3))
input_3 = tf.keras.layers.Input(shape = (224,224,3))
output_1 = pre_trained_model(input_1)
output_2 = pre_trained_model(input_2)
output_3 = pre_trained_model(input_3)
new_model = tf.keras.Model([input_1, input_2, input_3], [output_1, output_2, output_3])
new_model
имеет только 4 слоя, поскольку API Keras учитывает pre_trained_model
слой.
Я знаю, что вышеуказанный вариант работает, как я видел во многих примерах кода, но мне интересно, есть ли лучший вариант для этого. Мне неловко, потому что доступ к внутренним слоям окончательной модели будет испорчен, не говоря уже о том, что у модели будет дополнительный входной слой после добавленных 3 входных слоев (входной слой из предварительно обученной модели). все еще не поврежден и совершенно не нужен).