Daniel Voigt Godoy - Deep Learning with PyTorch Step-by-Step A Beginner’s Guide-leanpub

peiying410632
from peiying410632 More from this publisher
22.02.2024 Views

Transformed Dataset1 class TransformedTensorDataset(Dataset):2 def __init__(self, x, y, transform=None):3 self.x = x4 self.y = y5 self.transform = transform67 def __getitem__(self, index):8 x = self.x[index]910 if self.transform:11 x = self.transform(x)1213 return x, self.y[index]1415 def __len__(self):16 return len(self.x)A Multiclass Classification Problem | 373

Data Preparation1 # Builds tensors from numpy arrays BEFORE split2 # Modifies the scale of pixel values from [0, 255] to [0, 1]3 x_tensor = torch.as_tensor(images / 255).float()4 y_tensor = torch.as_tensor(labels).long()56 # Uses index_splitter to generate indices for training and7 # validation sets8 train_idx, val_idx = index_splitter(len(x_tensor), [80, 20])9 # Uses indices to perform the split10 x_train_tensor = x_tensor[train_idx]11 y_train_tensor = y_tensor[train_idx]12 x_val_tensor = x_tensor[val_idx]13 y_val_tensor = y_tensor[val_idx]1415 # We're not doing any data augmentation now16 train_composer = Compose([Normalize(mean=(.5,), std=(.5,))])17 val_composer = Compose([Normalize(mean=(.5,), std=(.5,))])1819 # Uses custom dataset to apply composed transforms to each set20 train_dataset = TransformedTensorDataset(21 x_train_tensor, y_train_tensor,22 transform=train_composer23 )24 val_dataset = TransformedTensorDataset(25 x_val_tensor, y_val_tensor,26 transform=val_composer27 )2829 # Builds a weighted random sampler to handle imbalanced classes30 sampler = make_balanced_sampler(y_train_tensor)3132 # Uses sampler in the training set to get a balanced data loader33 train_loader = DataLoader(34 dataset=train_dataset, batch_size=16,35 sampler=sampler36 )37 val_loader = DataLoader(dataset=val_dataset, batch_size=16)Before defining a model to classify our images, we need to discuss something else:the loss function.374 | Chapter 5: Convolutions

Data Preparation

1 # Builds tensors from numpy arrays BEFORE split

2 # Modifies the scale of pixel values from [0, 255] to [0, 1]

3 x_tensor = torch.as_tensor(images / 255).float()

4 y_tensor = torch.as_tensor(labels).long()

5

6 # Uses index_splitter to generate indices for training and

7 # validation sets

8 train_idx, val_idx = index_splitter(len(x_tensor), [80, 20])

9 # Uses indices to perform the split

10 x_train_tensor = x_tensor[train_idx]

11 y_train_tensor = y_tensor[train_idx]

12 x_val_tensor = x_tensor[val_idx]

13 y_val_tensor = y_tensor[val_idx]

14

15 # We're not doing any data augmentation now

16 train_composer = Compose([Normalize(mean=(.5,), std=(.5,))])

17 val_composer = Compose([Normalize(mean=(.5,), std=(.5,))])

18

19 # Uses custom dataset to apply composed transforms to each set

20 train_dataset = TransformedTensorDataset(

21 x_train_tensor, y_train_tensor,

22 transform=train_composer

23 )

24 val_dataset = TransformedTensorDataset(

25 x_val_tensor, y_val_tensor,

26 transform=val_composer

27 )

28

29 # Builds a weighted random sampler to handle imbalanced classes

30 sampler = make_balanced_sampler(y_train_tensor)

31

32 # Uses sampler in the training set to get a balanced data loader

33 train_loader = DataLoader(

34 dataset=train_dataset, batch_size=16,

35 sampler=sampler

36 )

37 val_loader = DataLoader(dataset=val_dataset, batch_size=16)

Before defining a model to classify our images, we need to discuss something else:

the loss function.

374 | Chapter 5: Convolutions

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!