model. train() tells your model that you are training the model. This helps inform layers such as Dropout and BatchNorm, which are designed to behave differently during training and evaluation.
PyTorch model eval train is defined as a process to evaluate the train data. The eval() function is used to evaluate the train model. The eval() is type of switch for a particular parts of model which act differently during training and evaluating time.
torch.nn.Module. It is a base class used to develop all neural network models. torch.nn.Sequential() It is a sequential Container used to combine different layers to create a feed-forward network.
model.train()
tells your model that you are training the model. So effectively layers like dropout, batchnorm etc. which behave different on the train and test procedures know what is going on and hence can behave accordingly.
More details:
It sets the mode to train
(see source code). You can call either model.eval()
or model.train(mode=False)
to tell that you are testing.
It is somewhat intuitive to expect train
function to train model but it does not do that. It just sets the mode.
Here is the code of 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
And here is the module.eval
.
def eval(self):
r"""Sets the module in evaluation mode."""
return self.train(False)
Modes train
and eval
are the only two modes we can set the module in, and they are exactly opposite.
That's just a self.training
flag and currently only Dropout
and BatchNorm
care about that flag.
By default, this flag is set to True
.
There are two ways of letting the model know your intention i.e do you want to train the model or do you want to use the model to evaluate.
In case of model.train()
the model knows it has to learn the layers and when we use model.eval()
it indicates the model that nothing new is to be learnt and the model is used for testing.
model.eval()
is also necessary because in pytorch if we are using batchnorm and during test if we want to just pass a single image, pytorch throws an error if model.eval()
is not specified.
model.train() |
model.eval() |
---|---|
Sets your model in training mode i.e. • BatchNorm layers use per-batch statistics • Dropout layers activated etc |
Sets your model in evaluation (inference) mode i.e. • BatchNorm layers use running statistics • Dropout layers de-activated etc. Equivalent to model.train(False) . |
Note: neither of these function calls run forward / backward passes. They tell the model how to act when run.
This is important as some modules (layers) (e.g. Dropout
, BatchNorm
) are designed to behave differently during training vs inference, and hence the model will produce unexpected results if run in the wrong mode.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With