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!") | |