A6_4210036_YASIR / a6_main.py
yasir2's picture
Upload a6_main.py
417c765 verified
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_instance = model().to(device)
# Define the loss function and optimizer
criterion = nn.CrossEntropyLoss() # Suitable for multi-class classification
optimizer = optim.Adam(model_instance.parameters(), lr=0.001)
# Number of epochs for training
num_epochs = 10
# Function to train the model
def train_model(train_loader, model, criterion, optimizer, num_epochs):
for epoch in range(num_epochs):
model.train() # Set the model to training mode
running_loss = 0.0
correct_predictions = 0
total_predictions = 0
# Iterate over the training data
for inputs, labels in tqdm(train_loader, desc=f"Epoch {epoch + 1}/{num_epochs}"):
inputs, labels = inputs.to(device), labels.to(device)
# Zero the gradients
optimizer.zero_grad()
# Forward pass
outputs = model(inputs)
# Calculate loss
loss = criterion(outputs, labels)
# Backward pass and optimization
loss.backward()
optimizer.step()
# Track loss and accuracy
running_loss += loss.item()
# Calculate accuracy
_, predicted = torch.max(outputs, 1)
correct_predictions += (predicted == labels).sum().item()
total_predictions += labels.size(0)
# Calculate average loss and accuracy for the epoch
avg_loss = running_loss / len(train_loader)
accuracy = 100 * correct_predictions / total_predictions
print(f"Epoch [{epoch + 1}/{num_epochs}], Loss: {avg_loss:.4f}, Accuracy: {accuracy:.2f}%")
# Train the model
train_model(train_loader, model_instance, criterion, optimizer, num_epochs)