跳转至

py torch 中的数据集和数据加载器

原文:https://www.geesforgeks.org/dataset-and-dataloaders-in-py torch/

PyTorch 是脸书开发的 Python 库,用于运行和训练机器学习和深度学习模型。训练深度学习模型需要我们将数据转换成模型可以处理的格式。 PyTorch 提供 torch.utils.data 库,通过数据集数据加载器类使数据加载变得容易。

数据集本身是数据加载器构造函数的参数,该构造函数指示要从中加载的数据集对象。有两种类型的数据集:

  • 地图风格数据集:这个数据集提供了两个函数 getitem(),len()分别返回引用的样本数据的索引和样本数。在示例中,我们将使用这种类型的数据集。
  • 可迭代式数据集:可以在一组可迭代数据样本中表示的数据集,为此我们使用 iter()函数。

Dataloader 另一方面,不仅允许我们批量迭代数据集,还允许我们访问用于多处理(允许我们并行加载多批数据,而不是一次加载一批)、洗牌等的内置函数。

语法:

DataLoader(数据集,batch_size=1,shuffle=False,采样器=无,batch_sampler =无,num_workers=0,collate_fn =无,pin_memory=False,drop_last=False,超时=0,worker_init_fn =无,* prefetch_factor = 2,persistent_workers=False)

使用的数据集: 心脏

让我们举一个例子来说明这个概念。

首先导入所有需要使用的库和数据集。将数据集加载到 torch 张量中,通过 getitem()协议访问该张量,以获取特定数据集的索引。然后我们解包数据并打印相应的特征和标签。

示例:

蟒蛇 3

# importing libraries
import torch
import torchvision
from torch.utils.data import Dataset, DataLoader
import numpy as np
import math

# class to represent dataset
class HeartDataSet():

    def __init__(self):

        # loading the csv file from the folder path
        data1 = np.loadtxt('heart.csv', delimiter=',',
                           dtype=np.float32, skiprows=1)

        # here the 13th column is class label and rest 
        # are features
        self.x = torch.from_numpy(data1[:, :13])
        self.y = torch.from_numpy(data1[:, [13]])
        self.n_samples = data1.shape[0] 

    # support indexing such that dataset[i] can 
    # be used to get i-th sample
    def __getitem__(self, index):
        return self.x[index], self.y[index]

    # we can call len(dataset) to return the size
    def __len__(self):
        return self.n_samples

dataset = HeartDataSet()

# get the first sample and unpack
first_data = dataset[0]
features, labels = first_data
print(features, labels)

输出:

张量([ 63.0000,1.0000,3.0000,145.0000,233.0000,1.0000,0.0000,

150.0000,0.0000,2.3000,0.0000,0.0000,1.0000])张量([1。])

torch dataLoader 将此数据集作为输入,与 batch_size、shuffle 等其他参数一起计算每批的 nums_samples,然后分批打印出目标和标签。

示例:

蟒蛇 3

# Loading whole dataset with DataLoader
# shuffle the data, which is good for training
dataloader = DataLoader(dataset=dataset, batch_size=4, shuffle=True)

# total samples of data and number of iterations performed
total_samples = len(dataset)
n_iterations = total_samples//4
print(total_samples, n_iterations)
for i, (targets, labels) in enumerate(dataloader):
    print(targets, labels)

输出:

我们现在训练数据,首先循环遍历历元,然后遍历样本,然后每次迭代打印出历元数、输入张量和标签张量。

示例:

蟒蛇 3

num_epochs = 2

for epoch in range(num_epochs):
    for i, (inputs, labels) in enumerate(dataloader):

        # here: 303 samples, batch_size = 4, n_iters=303/4=75 iterations
        # Run our training process
        if (i+1) % 5 == 0:
            print(f'Epoch: {epoch+1}/{num_epochs}, Step {i+1}/{n_iterations}|\
                Inputs {inputs.shape} | Labels {labels.shape}')

输出:



回到顶部