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
| import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import torchvision from torchvision import transforms, datasets
train_transform = transforms.Compose([ transforms.RandomResizedCrop(224, scale=(0.08, 1), ratio=(3/4, 4/3)), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) test_transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) train_data = datasets.ImageFolder('./hotdog/train', transform=train_transform) test_data = datasets.ImageFolder('./hotdog/test', transform=test_transform)
train_dataloader = DataLoader(train_data, batch_size=128, shuffle=True, num_workers=4) test_dataloader = DataLoader(test_data, batch_size=128, shuffle=False, num_workers=4)
model = torchvision.models.resnet18(pretrained=True) param_lx = [param for name, param in model.named_parameters() if param not in ['fc.weight', 'fc.bias']] model.fc = nn.Linear(model.fc.in_features, out_features=2) nn.init.kaiming_normal_(model.fc.weight)
device = torch.device('cuda:0')
optimizer = optim.SGD(model.parameters(), lr=0.001) loss = nn.CrossEntropyLoss()
if torch.cuda.device_count() > 1: model = torch.nn.DataParallel(model)
train(model, train_dataloader, test_dataloader, num_epochs=10, device=device, optimizer=optimizer, loss=loss)
|