Можно ли запускать одну и ту же модель несколько раз? - PullRequest
2 голосов
/ 01 июля 2019

Мой вопрос: я запустил модель keras для 100 эпох (дал эпох = 100) и остановился на некоторое время для охлаждения процессора и графического процессора.Чем я снова пробежал 100 эпох, и потери уменьшаются с того места, где он остановился в предыдущие 100 эпох.Это работает в любых условиях.Например, если на 1000 эпох я хочу тренировать свою модель, могу ли я остановиться через каждые 100 эпох и подождать, пока мой процессор и GPU не остынут, и запустить следующие 100 эпох.Могу ли я сделать это?

1 Ответ

3 голосов
/ 01 июля 2019

Не будет работать в всех условиях. Например, если вы перетасовываете данные и выполняете разделение проверки следующим образом:

fit(x,y,epochs=1, verbose=1, validation_split=0.2, shuffle=True)

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

Кроме того, , выполнив несколько подгонок, вы сотрете информацию истории (точность, потеря и т. Д. В каждой эпохе), заданную:

model.history

Так что некоторые функции обратного вызова, которые используют эту историю, не будут работать должным образом, например EarlyStopping (исходный код здесь ).

В противном случае он работает, поскольку не работает с оптимизатором keras, как вы можете видеть в исходном коде оптимизаторов keras ( Adadelta optimizer) .

Однако я не рекомендую делать это. Потому что это может привести к ошибкам в дальнейшей разработке. Более чистый способ сделать это - создать собственную функцию обратного вызова с такой задержкой:

import time

class DelayCallback(keras.callbacks.Callback):

    def __init__(self,delay_value=10, epoch_to_complete=10):
        self.delay_value = delay_value # in second
        self.epoch_to_complete = epoch_to_complete 


    def on_epoch_begin(self, epoch, logs={}):
        if (epoch+1) % self.epoch_to_complete == 0:
            print("cooling down")
            time.sleep(self.delay_value) 
        return


model.fit(x_train, y_train,
          batch_size=32,
          epochs=20,
          verbose=1, callbacks=[DelayCallback()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...