关于loading pre-trained weights后加层的问题

Question about adding a layer after loading pre-trained weights

我对创建具有部分加载权重的深度神经网络有疑问。

假设我按如下方式构建模型(假设为模型指定了一系列层):

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

然后,我加载模型的权重。

model.load_weights(weights)

我接下来要做的是为我刚刚创建的深度网络模型添加额外的层,将相应的权重初始化为随机值。

我不确定这样做的正确方法是什么,所以你能帮我解决这个问题吗?

假设您有一个加载了预训练权重的模型

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 属性。