Смена оптимизатора или lr после загрузки модели дает странные результаты - PullRequest
0 голосов
/ 22 мая 2018

Я использую последнюю версию Keras с бэкэндом Tensorflow (Python 3.6)

Я загружаю модель, у которой была точность обучения около 86%, когда я последний раз тренировал ее.

Первоначальный оптимизатор, который я использовал, был:

r_optimizer = optimizer=Adam(lr=0.0001, decay = .02)
model.compile(optimizer= r_optimizer,
              loss='categorical_crossentropy', metrics = ['accuracy'])

Если я загружу модель и продолжу тренировку без перекомпиляции, моя точность останется около 86% (даже после 10 или более эпох).Поэтому я хотел попробовать изменить скорость обучения или оптимизатор.

Если я перекомпилирую модель и попытаюсь изменить скорость обучения или оптимизатор следующим образом:

new_optimizer = optimizer=Adam(lr=0.001, decay = .02)

или на этот:

sgd = optimizers.SGD(lr= .0001)

и затем скомпилируйте:

model.compile(optimizer= new_optimizer ,
              loss='categorical_crossentropy', metrics = ['accuracy'])

model.fit ....

Точность будет сброшена примерно до 15% - 20%, вместо того, чтобы начинаться с 86%, и моя потеря будет намного выше.Даже если бы я использовал небольшую скорость обучения и перекомпилировал, я все равно начинал бы с очень низкой точностью.При просмотре интернета кажется, что некоторые оптимизаторы, такие как ADAM или RMSPROP, имеют проблему с сбросом весов после перекомпиляции (в данный момент не могу найти ссылку)

Поэтому я немного покопался и попытался сбросить свой оптимизатор без перекомпиляцииследующим образом:

    model = load_model(load_path)
    sgd = optimizers.SGD(lr=1.0) # very high for testing
    model.optimizer = sgd   #change optimizer

    #fit for training

     history =model.fit_generator(
     train_gen,
    steps_per_epoch = r_steps_per_epoch,
    epochs = r_epochs,
    validation_data=valid_gen,
    validation_steps= np.ceil(len(valid_gen.filenames)/r_batch_size),
    callbacks = callbacks,
    shuffle= True,
    verbose = 1)

Однако эти изменения, похоже, не отражаются на моих тренировках.Несмотря на значительное повышение lr, я все еще теряю около 86% с той же потерей.В каждую эпоху я вижу очень мало потерь или точности движения.Я ожидаю, что потеря будет намного более волатильной.Это приводит меня к мысли, что моя смена оптимизатора и lr не реализуется моделью.

Есть идеи, что я могу делать не так?

1 Ответ

0 голосов
/ 12 июня 2018

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

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