Как повторно инициализировать веса предварительно обученной модели с помощью Glorot на Keras?

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

Я пытаюсь повторно инициализировать веса слоев, используя Glorot Uniform с Keras из Tensorflow. Самый близкий подход заключается в следующем:

 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, для каждого уровня предварительно обученной модели как ResNet50?

Спасибо!

Комментарии:

1. Этот код, похоже, делает именно то, что вы хотите, в чем проблема?

2. Не работает. Результаты взвешивания должны быть GlorotNorm

3. Вы можете быть конкретны? Я не понимаю, что вы имеете в виду.

Ответ №1:

Если вы делаете это на keras.applications.xception или другой модели обучения keras transfer. Попробуйте следующее: InceptionV3(input_shape = (150, 150, 3), include_top = False, weights=None) установив веса равными Нулю (случайная инициализация), вы можете получить свою «повторно инициализированную» предварительно обученную модель. Glorot, похоже, работает не для всех слоев в Resnet.