torch.utils.data :pytorch的数据迭代器

用法:

from torch.utils import data
def load_array(data_arrays, batch_size, is_train=True):  #is_train是否打乱数据
    """构造一个PyTorch数据迭代器"""
    dataset = data.TensorDataset(*data_arrays) #传入一个元组的参数(data_tensor,data_target)
    return data.DataLoader(dataset, batch_size, shuffle=is_train)

数据输入器:data.TensorDataset()

class torch.utils.data.TensorDataset(data_tensor, target_tensor)

包装数据和目标张量的数据集。

通过沿着第一个维度索引两个张量来恢复每个样本。

参数:

  • data_tensor (Tensor) - 包含样本数据
  • target_tensor (Tensor) - 包含样本目标(标签)

数据加载器:data.DataLoader()

组合数据集和采样器,并在数据集上提供单进程或多进程迭代器。(用于加载生成数据)

class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, num_workers=0, collate_fn=, pin_memory=False, drop_last=False)

参数:

  • dataset (Dataset) – 加载数据的数据集。

  • batch_size (int, optional) – 每个batch加载多少个样本(默认: 1)。

  • shuffle (bool, optional) – 设置为True时会在每个epoch重新打乱数据(默认: False).

  • sampler (Sampler, optional) – 定义从数据集中提取样本的策略。如果指定,则忽略shuffle参数。
  • num_workers (int, optional) – 用多少个子进程加载数据。0表示数据将在主进程中加载(默认: 0)
  • collate_fn (callable, optional) –
  • pin_memory (bool, optional) –
  • drop_last (bool, optional) – 如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)

源码:

class TensorDataset(Dataset[Tuple[Tensor, ...]]):
    r"""Dataset wrapping tensors.

    Each sample will be retrieved by indexing tensors along the first dimension.

    Args:
        *tensors (Tensor): tensors that have the same size of the first dimension.
    """
    tensors: Tuple[Tensor, ...]

    def __init__(self, *tensors: Tensor) -> None:
        assert all(tensors[0].size(0) == tensor.size(0) for tensor in tensors), "Size mismatch between tensors"
        self.tensors = tensors

    def __getitem__(self, index):
        return tuple(tensor[index] for tensor in self.tensors)

    def __len__(self):
        return self.tensors[0].size(0)

表示Dataset的抽象类。

所有其他数据集都应该进行子类化。所有子类应该override__len____getitem__,前者提供了数据集的大小,后者支持整数索引,范围从0到len(self)。

你可能感兴趣的:(深度学习,pytorch,深度学习,人工智能)