Перенос весов, ведущий к меньшей модели (керас) - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь вставить слой dropout в мою модель. Поэтому я загружаю старую модель, создаю новую архитектуру модели и переношу веса.

Однако, когда я сохраняю новую модель, объем памяти намного меньше:

113 мегабайт против исходных 338 мегабайт. Я подозреваю, что я, должно быть, делаю ошибку в процессе, но модель, кажется, сохраняет и работает. Точность примерно на 15% ниже, но я не могу определить, является ли это эффектом отсева.

Вот мой код:

def add_dropout(layer_num = None, prob = .4):

#layer num is where you will insert the dropout layer


     model = load_model(model_path)
     layers_set1 = [layer for layer in model.layers[:layer_num + 1]]
     x = layers_set1[-1].output
     x = Dropout(prob, name = "drop_test1")(x)
     layers_set2 = [layer for layer in model.layers[layer_num+1:]]
     for layer in layers_set2:
        print(layer)
        x = layer(x)



     final_model = Model(inputs = layers_set1[0].input, outputs = x)

     for num, layer in enumerate(layers_set1):
         weights = layer.get_weights()
         final_model.layers[num].set_weights(weights)

     for num, layer in enumerate(layers_set2, start = len(layers_set1) + 1):
         weights = layer.get_weights()
         final_model.layers[num].set_weights(weights)


     final_model.save(os.path.join(save_dir, "dropout_added.h5"))

1 Ответ

2 голосов
/ 12 июня 2019

Возможно, вы использовали продвинутый оптимизатор, такой как Adam, который имеет состояние, которое сохраняется, если оно доступно, и его обычный размер в 2 раза превышает количество параметров модели.

Так что, если вы загружаете модельи сохраните новый на его основе, состояние оптимизатора будет потеряно, а размер файла модели уменьшен.Если вы сохраните модель после обучения, то состояние оптимизатора будет сохранено, и вы должны получить файл аналогичного размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...