DataLoader PyTorch — это полезная функция, которая упорядочивает ваши данные и упрощает конвейер машинного обучения. Это позволяет нам повторять данные, управлять партиями и перемешивать выборки, чтобы избежать переобучения. В этой статье мы рассмотрим реализацию DataLoader в PyTorch. Перед этим мы рассмотрим основные термины, которые будем использовать при реализации загрузчика данных. Затем мы начнем с набора данных Fashion MNIST в комплекте с PyTorch. Позже мы будем использовать DataLoader с нашим пользовательским набором данных.
- Что такое PyTorch?
- Что такое Tensor (математический подход)?
- Iterations, Batches, Epocs. Каковы они с точки зрения нейронных сетей?
- Внедрение DataLoader в набор данных Fashion MNIST, загрузка набора данных Fashion MNIST из Pytorch
- Пользовательский набор данных ваших файлов
- Обучение с DataLoader
- Итерация DataLoader
- Реализация загрузчика данных в пользовательском наборе данных
- Заключение
Что такое PyTorch?
PyTorch — это среда глубокого обучения с открытым исходным кодом для построения сетевых архитектур и других высокоуровневых методов, таких как RNN, CNN и LSTM. Он используется исследователями, предприятиями и сообществами машинного обучения и искусственного интеллекта.
Исследовательская группа искусственного интеллекта Facebook несет основную ответственность за его разработку.
Что такое Tensor (математический подход)?
Приложите силу к поверхности и наблюдайте, как она отклоняется в разные стороны. Вы можете ожидать, что она будет двигаться в том же направлении, что и сила, но это происходит не всегда; причина этого в том, что материал неоднороден во всех направлениях; он может иметь некоторую структуру, такую как кристалл или слои. Сила, которая является вектором, является вашей отправной точкой. (Каждое из направлений x, y и z состоит из трех компонентов.) Вы получаете вектор отклонения (движение по x, y и z). Однако сила направлена в обратную сторону от движения! Давайте представим, что ответ пропорционален силе, что означает удвоение силы в два раза больше движения. Это называется «линейной реакцией».
Как вы можете выразить все это в математических терминах? С тензором, конечно. Рассмотрим тензор как математический инструмент, который принимает вектор (например, силу) и возвращает новый вектор (движение). Тензоры требуются только тогда, когда два вектора указывают в противоположных направлениях.
Iterations, Batches, Epocs. Каковы они с точки зрения нейронных сетей?
Количество итераций (обозначенное здесь как n ) — это количество раз, когда пакет обучающих экземпляров оценивает градиент и обновляет параметры нейронной сети.
Размер пакета B относится к тому, сколько обучающих экземпляров используется в одной итерации. Обычно это используется, когда количество обучающих экземпляров довольно велико, и обычно бывает эффективно разделить все данные на мини-пакеты. Каждая партия имеет размер: 1< B < N.
Чтобы использовать полные обучающие данные один раз, требуется n ( N / B ) итераций. Вот что такое эпоха. Итак, ( N / B )* E, где E — количество эпох, — это общее количество изменений параметров.
Существует три типа градиентного спуска. Между ними есть компромисс, поскольку можно дать хорошую точность, но медленно. С другой стороны, один быстрее, но не гарантирует хорошей точности:
N=B, одна эпоха равна одной итерации в пакетном режиме.
Мини-пакетный режим: 1 < B < N, с N/B итераций на эпоху.
B=1, одна эпоха занимает N итераций в стохастической модели градиентного спуска.
Внедрение DataLoader в набор данных Fashion MNIST, загрузка набора данных Fashion MNIST из Pytorch
Fashion-MNIST — это набор данных изображений, включающий 60 000 обучающих и 10 000 тестовых экземпляров. Каждый пример включает изображение в градациях серого 28×28 с меткой одной из десяти категорий. Ниже приведены некоторые параметры, которым вы удовлетворяете при загрузке набора данных.
root : это каталог, в котором сохранен набор данных.
train : указывает, что обученные или проверенные данные должны быть загружены.
загрузка : если данные недоступны в корневом каталоге, они загружаются через Интернет.
transform и target_transform : эти параметры определяют преобразования объектов и меток.
import torch
fromtorch.utils.dataimport Dataset
fromtorchvisionimport datasets
fromtorchvision.transformsimportToTensor
importmatplotlib.pyplotasplttrain = datasets.FashionMNIST(
root=«data»,
train=True,
download=True,
transform=ToTensor()
)test = datasets.FashionMNIST(
root=«data»,
train=False,
download=True,
transform=ToTensor()
)
Пользовательский набор данных ваших файлов
importos
import pandas as pd
from torchvision.io importread_image# create class for Custom Dataset
classCustomDataset(Dataset):# initialize the dataset
def__init__(self, annotations, img_dir, trans=None, target_trans=None):
self.labels = pd.read_csv(annotations)
self.img_dir = img_dir
self.trans = trans
self.target_trans = target_trans# function to return length of data
def__len__(self):
returnlen(self.labels)# function to get sample at given index
def__getitem__(self, index):path = os.path.join(self.img_dir, self.labels.iloc[index, 0])
img = read_image(path)
label = self.labels.iloc[index, 1]
ifself.trans:
img = self.trans(img)
ifself.target_trans:
label = self.target_trans(label)returnimg, label
В приведенном выше коде мы видим три важных метода:
__init__ : эта функция вызывается при создании объекта набора данных. Оба преобразования, а также каталог, содержащий изображения и файл аннотаций, настроены.
__len__ : эта функция возвращает длину набора данных или количество выборок в наборе данных.
__getitem__ : этот метод дает нам образец, присутствующий в индексе.
Обучение с DataLoader
Сохраните данные в загрузчиках данных. Загрузчики данных являются итерируемыми, что позволяет передавать образцы по одному во время обучения и даже перемешивать данные после обработки всех пакетов.
from torch.utils.data import DataLoader
train_loader = DataLoader(train, batch_size=32, shuffle=True)
test_loader = DataLoader(test, batch_size=32, shuffle=True)
Итерация DataLoader
# Display image and label.
train_features, train_labels = next(iter(train_loader))print(f«Features shape of the current batch is {train_features.size()}»)
print(f«Labels shape of the current batch shape is {train_labels.size()}»)img = train_features[0].squeeze()
label = train_labels[0]
plt.imshow(img, cmap=«gray»)
plt.show()
print(f«Label: {label}»)
Выход
Особенности формы текущей партии: torch.Size([32, 1, 28, 28])
Форма меток текущей формы партии — torch.Size([32])
Label: 5
Каждая итерация в приведенном выше коде возвращает набор функций обучения и меток обучения для каждой итерации. Чтобы избежать переобучения, данные перемешиваются после обработки всех пакетов.
Реализация загрузчика данных в пользовательском наборе данных
# importing the libraries we will be using
import torch
fromtorch.utils.dataimport Dataset
fromtorch.utils.dataimportDataLoader# defining the Dataset class
classDatasets(Dataset):
# initializing the dataset here
def__init__(self):
numbers = list(range(0, 20, 1))
self.data = numbers
# get length of the dataset here
def__len__(self):
returnlen(self.data)
# get the item at an index
def__getitem__(self, index):
returnself.data[index]# create an object of data_set class
dataset = Datasets()# implementing data loader on the dataset and specifying the parameters
dataloader = DataLoader(dataset, batch_size=5, shuffle=True)
fori, batch in enumerate(dataloader):
print(i, batch)
Выход
0 tensor([ 0, 4, 9, 15, 14])
1 tensor([11, 16, 12, 3, 10])
2 tensor([ 6, 8, 2, 17, 1])
3 tensor([ 7, 18, 5, 13, 19])
Заключение
Мы прошли через реализацию PyTorch DataLoader для управления обучением наших данных. Теперь мы понимаем, как легко мы можем управлять партиями, перетасовкой, итерацией наших наборов данных с помощью DataLoader. Это помогает лучше анализировать наши модели и в конечном итоге улучшать их.