如何在Keras上使用Glorot重新初始化预训练模型的权重



我正在尝试使用来自Tensorflow的带有Keras的Glorot Uniform重新初始化层权重。最接近的方法是:

import numpy as np
import tensorflow as tf
for layer in base_model.layers:
layer_new_weights = []
for layer_weights in layer.get_weights():
initializer = tf.compat.v1.keras.initializers.glorot_normal
weights = initializer(np.shape(layer_weights))
layer_new_weights .append(weights)
layer.set_wegiths(layer_new_weights)

知道如何从Glorot Uniform将预训练模型的每一层初始化为ResNet50的权重吗?

谢谢!

代码较少的通用解决方案如下:

init = tf.keras.initializers.GlorotUniform()
for w in model.trainable_variables:
w.assign(init(w.shape))

如果你在keras.applications.ception或其他keras迁移学习模型上这样做。试试这个:InceptionV3(input_shape = (150, 150, 3), include_top = False, weights=None)通过将权重设置为None(随机初始化(,也许你可以得到你的";重新初始化";预训练模型。Glorot似乎不适用于Resnet中的所有层。