почему «процесс тестирования» находится внутри цикла эпохи глубокого обучения? - PullRequest
0 голосов
/ 18 октября 2019

Я новичок в углубленном изучении, вот код Я видел

Код в порядке, но я не понимаю следующее:

for epoch in range(1, args.epochs + 1):
    train(epoch)
    test(epoch)
    with torch.no_grad():
        sample = torch.randn(64, 20).to(device)
        sample = model.decode(sample).cpu()

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

(1) При глубоком обучении у нас есть набор данных для обучения, проверки, тестирования. Код test(epoch) действительно для проверки установлен? Там мы фиксируем параметры модели и прогнозируем для тестового набора данных outside the epoch loop?

(2), что означает with torch.no_grad():? и почему он тоже внутри epoch loop?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 18 октября 2019
  1. В приведенном вами примере проверка отсутствует. Обычно мы выполняем проверку, чтобы определить, улучшилась ли модель с последней эпохи, и сохранить контрольную точку. В этом примере авторы проводят обучение и тестирование без какой-либо проверки достоверности.

  2. with torch.no_grad() в основном отключают вычисление градиента. Отключение вычисления градиента полезно для вывода, когда вы уверены, что не будете звонить Tensor.backward(). Это уменьшит потребление памяти для вычислений.

  3. Почему внутри цикла epoch они выполняют декодирование с использованием случайной выборки? Это просто чтобы увидеть визуализацию сгенерированного изображения из случайной выборки. Обратите внимание, что функция test(epoch) дает количественное значение, которое показывает, насколько хорошо работает модель. Однако генерация изображения предназначена для качественного сравнения, то есть того, как модель улучшает генерацию изображения с каждой эпохой.

1 голос
/ 18 октября 2019
  1. Да, test(epoch) здесь фактически для проверки (Обновление: не совсем проверка, проверьте ответ ниже) .
  2. with torch.no_grad() означает, что вы переключаетесьот градиентов (требуется для обратного распространения во время тренировки). В валидации / тестировании они вам не нужны, и это сэкономит память и вычисления. Подробнее здесь .

Кроме того, ознакомьтесь с руководством здесь .

...