Как добавить слои в начале модели в Керасе? - PullRequest
0 голосов
/ 25 июня 2019

Я хочу добавить новые слои в предварительно обученную модель, используя 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 входных слоев (входной слой из предварительно обученной модели). все еще не поврежден и совершенно не нужен).

1 Ответ

1 голос
/ 25 июня 2019

Нет, это не добавляет слои, вы создаете модель с несколькими входами и несколькими выходами, где каждая сиамская ветвь делит веса. В Керасе нет другого API для этого, так что это единственный вариант.

И вы всегда можете получить доступ к слоям внутренней модели через переменную pre_trained_model, поэтому ничего не потеряно.

...