dwmk commited on
Commit
97b105c
·
verified ·
1 Parent(s): 714fd44

Create train.py

Browse files
Files changed (1) hide show
  1. train.py +54 -0
train.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.optim as optim
4
+ from torchvision import datasets, models, transforms
5
+ import os
6
+
7
+ # 1. Setup Data
8
+ data_dir = './animals-10' # Path to your Kaggle dataset
9
+ transform = transforms.Compose([
10
+ transforms.Resize((224, 224)),
11
+ transforms.RandomHorizontalFlip(),
12
+ transforms.ToTensor(),
13
+ transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
14
+ ])
15
+
16
+ dataset = datasets.ImageFolder(data_dir, transform=transform)
17
+ train_size = int(0.8 * len(dataset))
18
+ val_size = len(dataset) - train_size
19
+ train_ds, val_ds = torch.utils.data.random_split(dataset, [train_size, val_size])
20
+
21
+ train_loader = torch.utils.data.DataLoader(train_ds, batch_size=32, shuffle=True)
22
+ val_loader = torch.utils.data.DataLoader(val_ds, batch_size=32)
23
+
24
+ # 2. Modify Model (Fine-tuning)
25
+ model = models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V1)
26
+ num_ftrs = model.fc.in_features
27
+ # Change the output layer from 1000 classes to your 10 animals
28
+ model.fc = nn.Linear(num_ftrs, 10)
29
+
30
+ # 3. Training Loop (Simplified)
31
+ criterion = nn.CrossEntropyLoss()
32
+ optimizer = optim.Adam(model.parameters(), lr=0.0001)
33
+
34
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
35
+ model.to(device)
36
+
37
+ print("Starting training...")
38
+ for epoch in range(5): # Adjust epochs as needed
39
+ model.train()
40
+ for images, labels in train_loader:
41
+ images, labels = images.to(device), labels.to(device)
42
+ optimizer.zero_grad()
43
+ outputs = model(images)
44
+ loss = criterion(outputs, labels)
45
+ loss.backward()
46
+ optimizer.step()
47
+ print(f"Epoch {epoch+1} complete.")
48
+
49
+ # 4. Save the model weights
50
+ torch.save(model.state_dict(), 'animal_model.pth')
51
+ # Save the class names to keep track of the index-to-Italian mapping
52
+ with open('classes.txt', 'w') as f:
53
+ for cls in dataset.classes:
54
+ f.write(cls + '\n')