Download train.py from AI417UPM/AlexNet: direct link, hf CLI and curl.
- Browser
- Download file 2.21 kB
-
https://huggingface.co/AI417UPM/AlexNet/resolve/main/train.py
- Command line
-
hf download hf://AI417UPM/AlexNet/train.py
-
curl -L -o train.py https://huggingface.co/AI417UPM/AlexNet/resolve/main/train.py
2.21 kB
| import time | |
| import torch as tr | |
| import torchvision as tv | |
| import torchvision.transforms as transforms | |
| from model import model, loss_fn, optimizer | |
| def main(): | |
| batch_size = 128 | |
| epochs = 10 | |
| transform = transforms.Compose([ | |
| transforms.Resize((64, 64)), | |
| transforms.ToTensor()]) | |
| trn_dataset = tv.datasets.ImageFolder( | |
| root='data/tiny-imagenet-200/train', | |
| transform=transform) | |
| evl_dataset = tv.datasets.ImageFolder( | |
| root='data/tiny-imagenet-200/val', | |
| transform=transform) | |
| trn_loader = tr.utils.data.DataLoader( | |
| trn_dataset, | |
| batch_size=batch_size, | |
| shuffle=True, | |
| num_workers=8, | |
| pin_memory=True) | |
| evl_loader = tr.utils.data.DataLoader( | |
| evl_dataset, | |
| batch_size=batch_size, | |
| shuffle=False, | |
| num_workers=8, | |
| pin_memory=True) | |
| device = tr.device("cuda" if tr.cuda.is_available() else "cpu") | |
| model.to(device) | |
| print("Running on:", device) | |
| start_time = time.time() | |
| for epoch in range(1, epochs + 1): | |
| model.train() | |
| for images, labels in trn_loader: | |
| images = images.to(device) | |
| labels = labels.to(device) | |
| optimizer.zero_grad() | |
| output = model(images) | |
| loss = loss_fn(tr.log(tr.clamp(output, min=1e-9)), labels) | |
| loss.backward() | |
| optimizer.step() | |
| model.eval() | |
| correct = 0 | |
| total = 0 | |
| with tr.no_grad(): | |
| for images, labels in evl_loader: | |
| images = images.to(device) | |
| labels = labels.to(device) | |
| output = model(images) | |
| preds = tr.argmax(output, dim=1) | |
| correct += tr.sum(preds == labels).item() | |
| total += labels.size(0) | |
| accuracy = correct / total | |
| print(f"Epoch {epoch}/{epochs} - Loss: {loss.item():.4f} - Accuracy: {accuracy*100:.2f}%") | |
| end_time = time.time() | |
| print("Training finished") | |
| print(f"Final Loss: {loss.item():.4f}") | |
| print(f"Final Accuracy: {accuracy*100:.2f}%") | |
| print(f"Total Time: {end_time - start_time:.2f} seconds") | |
| if __name__ == "__main__": | |
| main() |