Pytorch - переход между режимами eval () и train () - PullRequest
0 голосов
/ 18 октября 2019

Я изучаю «Обучение глубокому подкреплению» и строю свой собственный пример после УЧЕБНОГО ОБУЧЕНИЯ (DQN). получить лучшее действие от модели 3. self.net.train ()

Вопрос в следующем: вызывает ли переход назад и вперед между режимами eval () и train () какой-либо ущерб процессу оптимизации?

Модель включает в себя только слои Linear и BatchNorm1d. Насколько я знаю, при использовании BatchNorm1d необходимо использовать model.eval () для использования модели, поскольку в режимах eval () и train () разные результаты.

При обучении нейронной сети классификации модель. eval () выполняется только после окончания обучения, но в случае «обучения с глубоким подкреплением» обычно используют стратегию, а затем продолжают процесс оптимизации.

Интересно, можно ли переходить назад и вперед между режимами? «безопасен» ли процесс оптимизации?

def strategy(self, state):
    # Explore or Exploit
    if self.epsilon > random():
        action = choice(self.actions)
    else:
        self.net.eval()
        action = self.net(state.unsqueeze(0)).max(1)[1].detach()
        self.net.train()

1 Ответ

0 голосов
/ 18 октября 2019

eval() переводит модель в режим оценки.

  1. В режиме оценки слой Dropout просто выступает в качестве промежуточного слоя.

  2. Во время обучения слой BatchNorm постоянно оценивает вычисленное среднее значение и дисперсию. Промежуточная сумма сохраняется с импульсом по умолчанию 0,1. Во время оценки это текущее среднее значение / дисперсия используется для нормализации.

Таким образом, переход назад и вперед между режимами eval() и train() не наносит ущерба процессу оптимизации. .

...