Part 5 - Implementing Multilayer Neural Networks
Pichle sections mein humne tensors aur autograd ke baare mein sikha. Ab hum PyTorch ko deep neural networks banane ke liye kaise use karte hain, yeh dekhenge.
PyTorch mein neural network banane ke liye, hum `torch.nn.Module` class ko subclass karte hain.
`torch.nn.Module` Class
`torch.nn.Module` ek base class hai jo bahut saari functionality provide karta hai, jisse models banana aur train karna aasan ho jaata hai. Isse hum layers aur operations ko ek saath rakh sakte hain aur model ke parameters ko track kar sakte hain.
Subclass ke andar, hum `__init__` constructor mein network layers ko define karte hain aur `forward` method mein unke beech ke interaction ko specify karte hain. `forward` method batata hai ki input data network se kaise guzarta hai aur ek computation graph banata hai.
`backward` method, jise humein khud implement karne ki zaroorat nahi hoti, training ke dauraan loss function ke gradients ko model parameters ke respect mein calculate karne ke liye use hota hai.
Chaliye ek classic multilayer perceptron banate hain jismein do hidden layers hain:
import torch
class NeuralNetwork(torch.nn.Module):
def __init__(self, num_inputs, num_outputs):
super().__init__()
self.layers = torch.nn.Sequential(
# 1st hidden layer
torch.nn.Linear(num_inputs, 30),
torch.nn.ReLU(),
# 2nd hidden layer
torch.nn.Linear(30, 20),
torch.nn.ReLU(),
# Output layer
torch.nn.Linear(20, num_outputs),
)
def forward(self, x):
logits = self.layers(x)
return logits
Is code mein, hum `torch.nn.Sequential` ka use kar rahe hain, jo layers ko ek ke baad ek execute karne ka ek aasan tareeka hai.
Ab ek naya neural network object banate hain:
model = NeuralNetwork(50, 3)
print(model)
Output:
NeuralNetwork(
(layers): Sequential(
(0): Linear(in_features=50, out_features=30, bias=True)
(1): ReLU()
(2): Linear(in_features=30, out_features=20, bias=True)
(3): ReLU()
(4): Linear(in_features=20, out_features=3, bias=True)
)
)
Model Parameters
Model mein kitne trainable parameters hain, yeh check karte hain:
num_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
print("Total number of trainable model parameters:", num_params)
Output:
Total number of trainable model parameters: 2213
`requires_grad=True` wale har parameter ko training ke dauraan update kiya jaata hai.
Hum weight parameter matrix ko bhi access kar sakte hain:
print(model.layers[0].weight.shape)
Output:
torch.Size([30, 50])
Forward Pass
Chaliye dekhte hain ki model ko forward pass ke through kaise use karte hain:
torch.manual_seed(123)
X = torch.rand((1, 50)) # Ek random input banayein
out = model(X) # Model ko input dein
print(out)
Output:
tensor([[-0.1262, 0.1080, -0.1792]], grad_fn=<AddmmBackward0>)
Jab hum `model(X)` call karte hain, to `forward` method automatically execute hota hai.