我正在使用 Xception 模型和在 ImageNet 上训练的预初始化权重,如下所示:
model = keras.applications.Xception(
weights='imagenet',
input_shape=(150,150,3)
)
现在我想获取特定层(按其名称,使用 model.get_layer(layerName)
),然后将其权重重新初始化为完全随机的权重。
最简单的方法是什么,如果可能的话?
答案 0 :(得分:1)
你可以像这样使用重新初始化函数:
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(...)