如何在预训练模型中随机初始化层?
How to randomly initialize layers in pretrained model?
我正在使用 Xception 模型,它具有在 ImageNet 上训练的预初始化权重:
model = keras.applications.Xception(
weights='imagenet',
input_shape=(150,150,3)
)
现在我想采用特定层(根据其名称,使用 model.get_layer(layerName)
),然后 将其权重重新初始化为完全随机的 。
最简单的方法是什么,甚至可能吗?
您可以像这样使用重新初始化函数:
def reinitialize_layer(model, initializer, layer_name):
layer = model.get_layer(layer_name)
layer.set_weights([initializer(shape=w.shape) for w in layer.get_weights()])
除了layer_name
,您还可以使用图层索引。如果您想重新初始化多个图层,您还可以扩展该函数,使其采用图层名称列表。
用法示例:
import keras
model = keras.applications.Xception(
weights='imagenet',
input_shape=(299,299,3)
)
# zeros as illustrative example, change to something else
initializer = keras.initializers.Zeros()
# check pretrained weights
print(model.get_layer("predictions").get_weights())
# change "predictions" to whatever layer name you like to use instead
reinitialize_layer(model, initializer, "predictions")
# check weights after reinitialization
print(model.get_layer("predictions").get_weights())
model.compile(...)
model.fit(...)
我正在使用 Xception 模型,它具有在 ImageNet 上训练的预初始化权重:
model = keras.applications.Xception(
weights='imagenet',
input_shape=(150,150,3)
)
现在我想采用特定层(根据其名称,使用 model.get_layer(layerName)
),然后 将其权重重新初始化为完全随机的 。
最简单的方法是什么,甚至可能吗?
您可以像这样使用重新初始化函数:
def reinitialize_layer(model, initializer, layer_name):
layer = model.get_layer(layer_name)
layer.set_weights([initializer(shape=w.shape) for w in layer.get_weights()])
除了layer_name
,您还可以使用图层索引。如果您想重新初始化多个图层,您还可以扩展该函数,使其采用图层名称列表。
用法示例:
import keras
model = keras.applications.Xception(
weights='imagenet',
input_shape=(299,299,3)
)
# zeros as illustrative example, change to something else
initializer = keras.initializers.Zeros()
# check pretrained weights
print(model.get_layer("predictions").get_weights())
# change "predictions" to whatever layer name you like to use instead
reinitialize_layer(model, initializer, "predictions")
# check weights after reinitialization
print(model.get_layer("predictions").get_weights())
model.compile(...)
model.fit(...)