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

时间:2020-09-29 22:23:22

标签: python tensorflow keras

我正尝试使用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?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您正在keras.applications.xception或其他keras转移学习模型上进行此操作。尝试以下操作:InceptionV3(input_shape = (150, 150, 3), include_top = False, weights=None)通过将权重设置为None(随机初始化),可以得到“重新初始化”的预训练模型。 Glorot似乎不适用于Resnet中的所有层。