关于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
属性。
我对创建具有部分加载权重的深度神经网络有疑问。
假设我按如下方式构建模型(假设为模型指定了一系列层):
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
属性。