-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdata_loader.py
104 lines (92 loc) · 4.47 KB
/
data_loader.py
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import os
import torch
import torchvision.transforms as transforms
import torchvision.datasets as datasets
def data_loader(args):
args.data_dir += args.dataset
if args.dataset.startswith('cifar'):
normalize = transforms.Normalize(mean=[x/255.0 for x in [125.3, 123.0, 113.9]],
std=[x/255.0 for x in [63.0, 62.1, 66.7]])
if args.augment:
transform_train = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
])
else:
transform_train = transforms.Compose([
transforms.ToTensor(),
normalize,
])
transform_test = transforms.Compose([
transforms.ToTensor(),
normalize
])
if args.dataset == 'cifar100':
train_loader = torch.utils.data.DataLoader(
datasets.CIFAR100(args.data_dir, train=True, download=False, transform=transform_train),
batch_size=args.batch_size, shuffle=True, num_workers=args.workers, pin_memory=True)
val_loader = torch.utils.data.DataLoader(
datasets.CIFAR100(args.data_dir, train=False, transform=transform_test),
batch_size=args.batch_size, shuffle=False, num_workers=args.workers, pin_memory=True)
class_num = 100
elif args.dataset == 'cifar10':
train_loader = torch.utils.data.DataLoader(
datasets.CIFAR10(args.data_dir, train=True, download=False, transform=transform_train),
batch_size=args.batch_size, shuffle=True, num_workers=args.workers, pin_memory=True)
val_loader = torch.utils.data.DataLoader(
datasets.CIFAR10(args.data_dir, train=False, transform=transform_test),
batch_size=args.batch_size, shuffle=False, num_workers=args.workers, pin_memory=True)
class_num = 10
else:
raise Exception ('unknown dataset: {}'.format(args.dataset))
return train_loader, val_loader, class_num
elif args.dataset == 'svhn':
transform = transforms.Compose([
transforms.ToTensor(),
])
train_dataset = datasets.SVHN(root=args.data_dir,
split='train',
download=False,
transform=transform, )
extra_dataset = datasets.SVHN(root=args.data_dir,
split='extra',
download=False,
transform=transform, )
train_dataset += extra_dataset
train_loader = torch.utils.data.DataLoader(train_dataset,
batch_size=args.batch_size, shuffle=True, num_workers=args.workers,
pin_memory=True)
valid_loader = torch.utils.data.DataLoader(
datasets.SVHN(root=args.data_dir, split='test', download=False, transform=transform, ),
batch_size=args.batch_size, shuffle=False, num_workers=args.workers, pin_memory=True)
return train_loader, valid_loader, 10
elif args.dataset == 'imagenet':
traindir = os.path.join(args.data_dir, 'train')
valdir = os.path.join(args.data_dir, 'val')
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
train_dataset = datasets.ImageFolder(
traindir,
transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
]))
train_loader = torch.utils.data.DataLoader(
train_dataset, batch_size=args.batch_size, shuffle=True,
num_workers=args.workers, pin_memory=True)
val_loader = torch.utils.data.DataLoader(
datasets.ImageFolder(valdir, transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
normalize,
])),
batch_size=args.batch_size, shuffle=False,
num_workers=args.workers, pin_memory=True)
return train_loader, val_loader, 1000
else:
raise Exception ('unknown dataset: {}'.format(args.dataset))