#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.