Spaces:
Runtime error
Runtime error
| import torch | |
| import torch.optim as optim | |
| import torch.nn as nn | |
| def train_model(model, trainloader, testloader, epochs=10, learning_rate=0.001): | |
| """ | |
| Trains the PyTorch model. | |
| """ | |
| device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") | |
| print(f"Training on device: {device}") | |
| model.to(device) | |
| criterion = nn.CrossEntropyLoss() | |
| optimizer = optim.Adam(model.parameters(), lr=learning_rate) | |
| history = {'accuracy': [], 'loss': []} | |
| for epoch in range(epochs): | |
| running_loss = 0.0 | |
| correct = 0 | |
| total = 0 | |
| model.train() | |
| for i, data in enumerate(trainloader, 0): | |
| inputs, labels = data[0].to(device), data[1].to(device) | |
| optimizer.zero_grad() | |
| outputs = model(inputs) | |
| loss = criterion(outputs, labels) | |
| loss.backward() | |
| optimizer.step() | |
| running_loss += loss.item() | |
| _, predicted = torch.max(outputs.data, 1) | |
| total += labels.size(0) | |
| correct += (predicted == labels).sum().item() | |
| epoch_loss = running_loss / len(trainloader) | |
| epoch_acc = correct / total | |
| history['loss'].append(epoch_loss) | |
| history['accuracy'].append(epoch_acc) | |
| print(f'Epoch {epoch + 1}/{epochs} - Loss: {epoch_loss:.4f} - Accuracy: {epoch_acc:.4f}') | |
| print('Finished Training') | |
| return history | |