Подтвердить что ты не робот

Что делает model.train() в pytorch?

nn.Module ли он forward() в nn.Module? Я думал, что когда мы вызываем модель, используется метод forward. Почему нам нужно указать train()?

4b9b3361

Ответ 1

model.train() сообщает вашей модели, что вы model.train() модель. Таким образом, эффективно такие слои, как выпадание, групповой поток и т.д., Которые ведут себя по-разному в поезде и в процедурах испытаний, знают, что происходит, и, следовательно, могут вести себя соответствующим образом.

Более подробно: он устанавливает режим тренировки (см. Исходный код). Вы можете вызвать model.eval() или model.train(mode = False), чтобы сообщить, что вы тестируете. Это несколько интуитивного ожидать train функции для обучения модели, но он не делает этого. Он просто устанавливает режим.

Ответ 2

Есть два способа позволить модели знать ваше намерение, т.е. Вы хотите обучить модель или хотите использовать модель для оценки. В случае model.train() модель знает, что она должна изучать слои, и когда мы используем model.eval(), это указывает на то, что ничего нового не нужно изучать, а модель используется для тестирования. model.eval() также необходимо, потому что в pytorch, если мы используем batchnorm и во время теста, если хотим просто передать одно изображение, pytorch выдает ошибку, если model.eval() не указан.

Ответ 3

Вот код module.train():

def train(self, mode=True):
        r"""Sets the module in training mode."""      
        self.training = mode
        for module in self.children():
            module.train(mode)
        return self

А вот и module.eval.

def eval(self):
        r"""Sets the module in evaluation mode."""
        return self.train(False)

Режимы train и eval - это единственные два режима, в которые мы можем установить модуль, и они абсолютно противоположны.

Это просто self.training флаг и в настоящее время только отсев и bachnorm забота о том флаге.

По умолчанию этот флаг установлен в True.