Spaces:
Sleeping
Sleeping
File size: 1,478 Bytes
47b21c5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # Image transformations (VERY IMPORTANT for ResNet)
transform = transforms.Compose([
transforms.Resize((224, 224)), # ResNet needs this
transforms.ToTensor()
])
# Load dataset
dataset = datasets.ImageFolder(
root='/content/drive/MyDrive/TrashNet',
transform=transform
)
# Create DataLoader
train_loader = torch.utils.data.DataLoader(
dataset,
batch_size=32,
shuffle=True
)
# Number of classes
NUM_CLASSES = len(dataset.classes)
print("Classes:", dataset.classes)
# Load pretrained ResNet
model = models.resnet18(pretrained=True)
# Freeze all layers (optional but recommended)
for param in model.parameters():
param.requires_grad = False
# Replace final layer
model.fc = nn.Linear(model.fc.in_features, NUM_CLASSES)
# Move to device
model = model.to(device)
print(model)
criterion = nn.CrossEntropyLoss()
# Only train last layer
optimizer = optim.Adam(model.fc.parameters(), lr=0.001)
EPOCHS = 5
for epoch in range(EPOCHS):
model.train()
running_loss = 0.0
for images, labels in train_loader:
images, labels = images.to(device), labels.to(device)
# Forward pass
outputs = model(images)
loss = criterion(outputs, labels)
# Backward
optimizer.zero_grad()
loss.backward()
optimizer.step()
running_loss += loss.item()
print(f"Epoch [{epoch+1}/{EPOCHS}], Loss: {running_loss:.4f}") |