Вопрос о добавлении слоя после загрузки предварительно подготовленных весов

#tensorflow #keras #deep-learning #tensorflow2.0

#tensorflow #keras #глубокое обучение #tensorflow2.0

Вопрос:

У меня вопрос о создании глубокой нейронной сети с частично загружаемыми весами.

Предположим, я создаю модель следующим образом (предположим, что для модели указана последовательность слоев):

 model = models.Model(inputs, x, name=model_name)
  

И затем я загружаю веса для модели.

 model.load_weights(weights)
  

Что я хочу сделать дальше, так это добавить дополнительные слои в модель глубокой сети, которую я только что создал, инициализируя соответствующие веса случайными значениями.

Я не уверен, как правильно это сделать, не могли бы вы помочь мне с этим?

Ответ №1:

Допустим, у вас есть модель, загруженная с предварительно подготовленными весами

 model.load_weights(weights)
#Set trainable to false to maintain the previous weights
for layer in model.layers:
    layer.trainable = False
  

Ниже вы увидите несколько примеров, но обязательно обратитесь к https://www.tensorflow.org/api_docs/python/tf/keras/initializers для всех типов инициализаторов.

Последовательный способ моделирования

 initializer_1 = tf.keras.initializers.HeNormal()
dense_1 = model.add(Dense(512,activation='relu',kernel_initializer = initializer_1))
initializer_2 = tf.keras.initializers.GlorotUniform()
model.add(Dense(256,activation = 'relu',kernel_initializer = initializer_2))
  

Способ функциональной модели

 initializer_1 = tf.keras.initializers.HeNormal()
dense_1 = Dense(512,activation='relu',kernel_initializer = initializer_1)(model.output)
initializer_2 = tf.keras.initializers.GlorotUniform()
dense_2 = Dense(256,activation = 'relu',kernel_initializer = initializer_2)(dense_1)
  

По умолчанию вновь добавленные обучаемые, поэтому вам не нужно беспокоиться о настройке trainable свойства.