This code trains a simple CNN on MNIST for one batch using a learning rate of 0.01. It prints the loss to show training progress.
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
# Simple CNN model for MNIST
class SimpleCNN(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
self.pool = nn.MaxPool2d(2)
self.fc1 = nn.Linear(10 * 12 * 12, 50)
self.fc2 = nn.Linear(50, 10)
def forward(self, x):
x = self.pool(torch.relu(self.conv1(x)))
x = x.view(-1, 10 * 12 * 12)
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# Load MNIST data
transform = transforms.Compose([transforms.ToTensor()])
train_dataset = datasets.MNIST('.', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
# Initialize model, loss, optimizer with learning rate 0.01
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()
learning_rate = 0.01
optimizer = optim.SGD(model.parameters(), lr=learning_rate)
# Train for 1 batch
model.train()
for batch_idx, (data, target) in enumerate(train_loader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
if batch_idx == 0:
print(f'Batch {batch_idx} Loss: {loss.item():.4f}')
break