关于在加载预训练的权重后添加图层的问题

时间:2020-10-05 05:28:07

标签: tensorflow keras deep-learning tensorflow2.0

我有一个关于创建部分负载权重的深度神经网络的问题。

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

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

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

model.load_weights(weights)

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

我不确定执行此操作的正确方法是什么,那么您可以帮我吗?

1 个答案:

答案 0 :(得分:0)

假设您的模型已加载了预训练的权重

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