1. PyTorch loops for training and validation

Posted by


Training and validation loops are essential components of every deep learning model built using the PyTorch library. These loops allow you to iteratively train your model on a training dataset and evaluate its performance on a validation dataset. In this tutorial, I will guide you through the process of creating training and validation loops in PyTorch.

  1. Import necessary libraries:
    Before you can start building your training and validation loops, you need to import the necessary libraries. Make sure you have PyTorch installed on your system. You can install PyTorch using pip:
pip install torch

Now, import the required libraries:

import torch
import torch.nn as nn
import torch.optim as optim
  1. Define your model:
    Next, you need to define your neural network model. In this tutorial, I will create a simple feedforward neural network with one hidden layer. Here’s an example of how you can define a neural network using PyTorch:
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x
  1. Define your training and validation functions:
    Now, it’s time to define the functions that will handle the training and validation loops. Here’s an example of how you can define these functions:
def train(model, criterion, optimizer, dataloader):
    model.train()
    running_loss = 0.0

    for inputs, labels in dataloader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()

    return running_loss / len(dataloader)

def validate(model, criterion, dataloader):
    model.eval()
    running_loss = 0.0
    correct = 0
    total = 0

    with torch.no_grad():
        for inputs, labels in dataloader:
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            running_loss += loss.item()

            _, predicted = torch.max(outputs, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()

    return running_loss / len(dataloader), correct / total
  1. Initialize your model, criterion, optimizer, and data loaders:
    Before you can start training your model, you need to initialize your model, criterion (loss function), optimizer, and data loaders. Here’s an example of how you can initialize these components:
model = SimpleNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)

# Initialize your training and validation data loaders
train_dataloader = # your training data loader
val_dataloader = # your validation data loader
  1. Train your model:
    Now you can start training your model by iterating over multiple epochs and calling the train and validate functions within a loop:
num_epochs = 10

for epoch in range(num_epochs):
    train_loss = train(model, criterion, optimizer, train_dataloader)
    val_loss, val_acc = validate(model, criterion, val_dataloader)

    print(f'Epoch {epoch+1}/{num_epochs}, Train Loss: {train_loss}, Val Loss: {val_loss}, Val Acc: {val_acc}')

That’s it! You have successfully created training and validation loops for your PyTorch model. You can further customize these loops by adding additional functionality such as learning rate scheduling, early stopping, model saving, and more. The key is to understand the fundamentals of training and validation loops and how they interact with your neural network model.

0 0 votes
Article Rating
11 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@sahhaf1234
2 months ago

@1:35 what does it mean "to put the model in train mode?" Are we setting requires_grad=false??

@otmaneamel8642
2 months ago

that's too much code to do simple operations , I prefer using Keras to gain time and energy rather than dealing with boilerplate code

@shekhshehab1672
2 months ago

Hello sir. If anyone want to learn machine learning thoroughly through Coursera courses, which courses you will suggest to him?

@dalchemistt7
2 months ago

I was waiting for the 8th video in the series for so long – thought the series is abandoned 🙁
Glad it started again 🙂

@shaelanderchauhan1963
2 months ago

Happy to see that the Grandmaster channel is growing slowly. The growth of this Channel will be a huge benefit to the data science community.

@diegoquintana2249
2 months ago

Assuming that the losses are using the "mean" reduction, what is the meaning of adding batch losses (total_loss += loss) and not averaging them? I've seen other resources where at the end of the loop, this total_loss is averaged over the number of steps. I've also read that this choice (mean or only sum) only influences the impact of the learning rate in the training since it only scales the learning step differently.

@FarCuck
2 months ago

Hi Abhishekh, Great work! Just started your book and also found your channel. Good to see you uploading regularly!

@Mutual_Information
2 months ago

Just discovered this channel. I’m excited to see someone so accomplished on kaggle sharing that knowledge here. Kaggle can be absolute goldmine for data science techniques.

@DanielWeikert
2 months ago

Can you elaborate what we need to be aware of considering the names when we use model(**data)? Really like the way you structure the code.
Thanks

@aadityasingh4911
2 months ago

I dont see much difference in this from linear regression method

@ajju3866
2 months ago

sir can you make a vedio for custom optimizer in pytorch