Загрузчик данных PyTorch

В этом руководстве мы узнаем, что такое схема базы данных и почему они используются Изучение

DataLoader PyTorch — это полезная функция, которая упорядочивает ваши данные и упрощает конвейер машинного обучения. Это позволяет нам повторять данные, управлять партиями и перемешивать выборки, чтобы избежать переобучения. В этой статье мы рассмотрим реализацию DataLoader в PyTorch. Перед этим мы рассмотрим основные термины, которые будем использовать при реализации загрузчика данных. Затем мы начнем с набора данных Fashion MNIST в комплекте с PyTorch. Позже мы будем использовать DataLoader с нашим пользовательским набором данных.

Что такое PyTorch?

PyTorch — это среда глубокого обучения с открытым исходным кодом для построения сетевых архитектур и других высокоуровневых методов, таких как RNN, CNN и LSTM. Он используется исследователями, предприятиями и сообществами машинного обучения и искусственного интеллекта.

Исследовательская группа искусственного интеллекта Facebook несет основную ответственность за его разработку.

Что такое Tensor (математический подход)?

Приложите силу к поверхности и наблюдайте, как она отклоняется в разные стороны. Вы можете ожидать, что она будет двигаться в том же направлении, что и сила, но это происходит не всегда; причина этого в том, что материал неоднороден во всех направлениях; он может иметь некоторую структуру, такую ​​как кристалл или слои. Сила, которая является вектором, является вашей отправной точкой. (Каждое из направлений x, y и z состоит из трех компонентов.) Вы получаете вектор отклонения (движение по x, y и z). Однако сила направлена ​​в обратную сторону от движения! Давайте представим, что ответ пропорционален силе, что означает удвоение силы в два раза больше движения. Это называется «линейной реакцией».

Как вы можете выразить все это в математических терминах? С тензором, конечно. Рассмотрим тензор как математический инструмент, который принимает вектор (например, силу) и возвращает новый вектор (движение). Тензоры требуются только тогда, когда два вектора указывают в противоположных направлениях.

Iterations, Batches, Epocs. Каковы они с точки зрения нейронных сетей?

Количество итераций (обозначенное здесь как n ) — это количество раз, когда пакет обучающих экземпляров оценивает градиент и обновляет параметры нейронной сети.

Читайте также:  SaaS в 2021 году: тенденции роста и статистика

Размер пакета 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.pyplotasplt

train = 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. Это помогает лучше анализировать наши модели и в конечном итоге улучшать их.

Оцените статью
bestprogrammer.ru
Добавить комментарий