Актуальной проблемой является генерация случайных весов слоя для существующей (уже построенной) модели в Керасе.Есть некоторые решения, использующие Numpy [2], но не стоит выбирать такие решения.Потому что в Keras есть специальные инициализаторы, использующие разные распределения для каждого типа слоя.Когда вместо инициализаторов используется Numpy, сгенерированные веса имеют распределение, отличное от исходного.Давайте приведем пример:
Второй слой моей модели - это сверточный (1D) слой, и его инициализатором является GlorotUniform [1].Если вы генерируете случайные веса с использованием Numpy, распределение сгенерированных весов не будет GlorotUniform.
У меня есть решение этой проблемы, но у него есть некоторые проблемы.Вот что у меня есть:
def set_random_weights(self, tokenizer, config):
temp_model = build_model(tokenizer, config)
self.model.set_weights(temp_model.get_weights())
Я строю существующую модель.После процесса построения веса модели повторно инициализируются.Затем я получаю повторно инициализированные веса и устанавливаю их для другой модели.Построение модели для генерации новых весов имеет избыточные процессы.Итак, мне нужно новое решение без построения модели и Numpy.
- https://keras.io/initializers/
- https://www.codementor.io/nitinsurya/how-to-re-initialize-keras-model-weights-et41zre2g