ادامه مجموعه داده های تصویر، بارگذارهای داده و تبدیل ها در Pytorch
موسسه پایا پروژه به عنوان متصدی انجام پروژه های پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی پایتون مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری شما داشته باشد.
افزایش داده ها
ما همچنین می توانیم یک تبدیل برای انجام افزایش داده ها تعریف کنیم. وقتی حجم داده کمتری داریم و میخواهیم حجم و تنوع دادهها را افزایش دهیم، افزایش داده ابزار بسیار مفیدی است. در زیر نمونه ای از تبدیل است که چرخش عمودی تصادفی را انجام می دهد و لرزش رنگی تصادفی را در تصویر ورودی اعمال می کند.
Defining a custom augmentation class#
:class CustomAugmentation(object)
:def __init__(self, flip_prob=0.5, jitter_prob=0.5)
self.flip_prob = flip_prob
self.jitter_prob = jitter_prob
Defining the transform method#
:def __call__(self, image)
Flipping the image horizontally#
:if np.random.random() < self.flip_prob
(image = np.flip(image, axis=1
Applying random color jitter by adding random noise#
:if np.random.random() < self.jitter_prob
image = np.array(image, dtype=np.int32)
Adding random noise to the image#
image = image + np.random.randint(-50, 50, size=image.shape, dtype=np.int32)
Returning the augmented image#
return image
اکنون یک تبدیل را بر اساس افزایش سفارشی که قبلا تعریف کردیم تعریف می کنیم و تغییرات مختلف تصویر مورد نظر را نمایش می دهیم.
Defining augmented and non-augmented transforms#
])aug_transform = torchvision.transforms.Compose
Replace with the transform object#
,()CustomTransform
,()CustomAugmentation
([
])nonaug_transform = torchvision.transforms.Compose
Replace with the transform object#
,()CustomTransform
([
Creating a dataset object with augmented and non-augmented transforms#
aug_dataset = ImageDataset(data_path, transform=aug_transform)
nonaug_dataset = ImageDataset(data_path, transform=nonaug_transform)
Displaying a non augmented images from the dataset and its augmented version#
image, target = nonaug_dataset[random_index]
Creating a plot#
plt.figure(figsize=(10, 10))
Adding the non augmented image#
plt.subplot(2, 2, 1)
plt.imshow(target)
plt.title(‘Non augmented image’)
Adding the augmented images#
:for i in range(2, 5)
image, target1 = aug_dataset[random_index]
plt.subplot(2, 2, i)
plt.imshow(target1)
plt.title(‘Augmented image’)
Displaying the plot#
()plt.show
خروجی:
دیتالودرهای سفارشی
یک dataloader سفارشی را می توان با بسته بندی مجموعه داده به همراه کلاس torch.utils.data.DataLoader تعریف کرد. این ما را قادر می سازد تا جنبه های مختلف بارگذار داده مانند اندازه دسته ای، تعداد کارگران و اینکه آیا داده ها را در پروژه پایتون به هم بزنیم یا کنترل کنیم. ما می توانیم یک بارگذار داده سفارشی را در Pytorch به صورت زیر تعریف کنیم:
Defining a custom data loader#
)dataloader = torch.utils.data.DataLoader
Replace with the dataset object#
,dataset=dataset
Defining the batch size#
,batch_size=4
If true, shuffles the dataset at every epoch#
,shuffle=True
Number of parallel processes for loading the data#
num_workers=2
(
Get the length of the dataloader#
(Number of batches)#
print(‘Number of batches:’,len(dataloader))
خروجی:
Number of batches: 274
مجموعه داده های آموزشی و آزمایشی
اکنون، ما تمام این دانش و استفاده را برای تعریف آموزش و مجموعه داده آزمایشی ترکیب خواهیم کرد. ما پیش پردازش را روی هر دو مجموعه داده انجام خواهیم داد در حالی که فقط روی مجموعه داده قطار تقویت می کنیم. پیاده سازی Pytorch به شرح زیر است:
File path to the dataset, replace this with your path#
‘train_path = f’./maps/train
‘test_path = f’./maps/val
Defining the train and test transforms#
])train_transform = torchvision.transforms.Compose
,()CustomTransform
,()CustomAugmentation
([
]) test_transform = torchvision.transforms.Compose
CustomTransform(),
([
Creating the train and test datasets#
train_dataset = ImageDataset(train_path, transform=train_transform)
test_dataset = ImageDataset(test_path, transform=test_transform)
# Creating the train and test dataloaders#
)train_dataloader = torch.utils.data.DataLoader
,dataset=train_dataset
,batch_size=4
,shuffle=True
num_workers=2
(
)test_dataloader = torch.utils.data.DataLoader
,dataset=test_dataset
,batch_size=1
,shuffle=False
num_workers=2
(
Printing the length of the train and test dataloaders#
print(‘Number of training batches:’,len(train_dataloader))
print(‘Number of testing batches:’,len(test_dataloader))
خروجی:
Number of training batches: 274
Number of testing batches: 1098