Tensorflow 如何在预训练模型中随机初始化层?

Tensorflow 如何在预训练模型中随机初始化层?,tensorflow,keras,conv-neural-network,tensorflow2.0,Tensorflow,Keras,Conv Neural Network,Tensorflow2.0,我使用的是在ImageNet上训练的带有预初始化权重的异常模型,因此: model = keras.applications.Xception( weights='imagenet', input_shape=(150,150,3) ) 现在,我想获取特定的层(通过其名称,使用model.get_layer(layerName)),然后将其权重重新初始化为完全随机的一个 最简单的方法是什么?如果可能的话?您可以使用如下重新初始化函数: def重新初始化层(模型、初始值设定项、层

我使用的是在ImageNet上训练的带有预初始化权重的异常模型,因此:

model = keras.applications.Xception(
    weights='imagenet',
    input_shape=(150,150,3)
)
现在,我想获取特定的层(通过其名称,使用
model.get_layer(layerName)
),然后将其权重重新初始化为完全随机的一个


最简单的方法是什么?如果可能的话?

您可以使用如下重新初始化函数:

def重新初始化层(模型、初始值设定项、层名称):
图层=模型。获取图层(图层名称)
layer.set_weights([layer.get_weights()]中w的初始值设定项(shape=w.shape))
您还可以使用图层索引,而不是
图层名称。如果要重新初始化多个图层,还可以扩展该函数,使其获取图层名称列表

用法示例:

导入keras
模型=keras.applications.exception(
权重='imagenet',
输入_形状=(299,3)
)
#零作为说明性示例,请更改为其他内容
初始化器=keras.initializers.Zeros()
#检查预训练重量
打印(model.get_layer(“预测”).get_weights())
#将“预测”改为您喜欢使用的任何图层名称
重新初始化_层(模型、初始值设定项、“预测”)
#重新初始化后检查重量
打印(model.get_layer(“预测”).get_weights())
model.compile(…)
模型拟合(…)