Spaces:
Sleeping
Sleeping
| import torch | |
| import torch.nn as nn | |
| import torch.optim as optim | |
| import torchvision | |
| import torchvision.transforms as transforms | |
| import tqdm | |
| # Define transformations | |
| transform = transforms.Compose([ | |
| transforms.Resize((224, 224)), # Resize images for ResNet | |
| transforms.ToTensor(), | |
| transforms.Normalize((0.5,), (0.5,)) | |
| ]) | |
| # Load CIFAR-10 Dataset | |
| trainset = torchvision.datasets.CIFAR10(root="./data", train=True, download=True, transform=transform) | |
| trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True) | |
| testset = torchvision.datasets.CIFAR10(root="./data", train=False, download=True, transform=transform) | |
| testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False) | |
| # Define Model (ResNet-18) | |
| model = torchvision.models.resnet18(pretrained=True) | |
| model.fc = nn.Linear(model.fc.in_features, 10) # Adjust for 10 CIFAR-10 classes | |
| # Define Loss and Optimizer | |
| criterion = nn.CrossEntropyLoss() | |
| optimizer = optim.Adam(model.parameters(), lr=0.001) | |
| # Train the Model | |
| num_epochs = 5 | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| model.to(device) | |
| for epoch in range(num_epochs): | |
| model.train() | |
| running_loss = 0.0 | |
| for images, labels in tqdm.tqdm(trainloader): | |
| images, labels = images.to(device), labels.to(device) | |
| optimizer.zero_grad() | |
| outputs = model(images) | |
| loss = criterion(outputs, labels) | |
| loss.backward() | |
| optimizer.step() | |
| running_loss += loss.item() | |
| print(f"Epoch {epoch+1}/{num_epochs}, Loss: {running_loss/len(trainloader)}") | |
| # Save the Trained Model | |
| torch.save(model.state_dict(), "model.pth") | |
| print("Model training complete and saved as model.pth!") | |