Pytorch 中的 torch.utils.data.dataloader.default_collate()

1 default_collate() 的作用

  • 将对应的元素类型变为 Tensor 类型的数据

  • 使用torch.utils.data.DataLoder() 处理数据后,当数据中有损坏的文件,我们则需要剔除,剔除试用的是filter(function,iteration)来处理,返回一个迭代器对象,我们可以通过list转换为列表的形式。但是送到神经网络中时,我们还是需要是batch的形式

  • 原来的DataLoader处理后的图像就是tensor的形式。具体的可以看该函数,函数中的关键字里有transform,所以我们需要将处理后的数据,在转换为batch的形式,其实就是将列表中中的元素处理为tensor的形式


2 示例

from torch.utils.data.dataloader import default_collate

a = [(0, 1), (2, 3), (4, 5), (6, 7)]
print('a.type:', type(a))
print(a)
b = default_collate(a)
print('b.type:',type(b))
print(b)
c = [[[0 ,1], [2, 3], [4, 5]],
    [[6, 7], [8, 9], [10, 11]]]
d = default_collate(c)
print('d.type:',type(d))
print(d)

>>> a.type: <class 'list'>
>>> [(0, 1), (2, 3), (4, 5)]
>>> b.type: <class 'list'>
>>> [tensor([0, 2, 4]), tensor([1, 3, 5])]
>>> d.type: <class 'list'>
>>> [[tensor([0, 6]), tensor([1, 7])], [tensor([2, 8]), tensor([3, 9])], [tensor([ 4, 10]), tensor([ 5, 11])]]

注意它的结果, 是将列表中的元素转换为一个一个的 batch的形式

`torch.utils.data.Dataset`是PyTorch的一个重要接口,它代表了一个数据集的基本抽象概念。在深度学习,当我们处理大量的训练样本时,通常会把数据组织成某种形式的数据集,以便于模型训练。`Dataset`是一个基类,用于存储数据并定义了一些基本的方法: 1. **初始化**: ```python class CustomDataset(torch.utils.data.Dataset): def __init__(self, data_path): self.data = load_data(data_path) ``` 数据集实例化时,需要传入数据加载路径或其他必要的参数。 2. **长度计算**(`__len__()`): ```python def __len__(self): return len(self.data) ``` 这个方法返回数据集元素的数量,对于迭代器来说这是必需的。 3. **数据访问**(`__getitem__()`): ```python def __getitem__(self, index): return self.data[index] ``` 它负责根据索引返回单个样本。这可以是图像、文本、标签等。这个方法可以根据实际需求进行定制,如处理预处理、随机采样等操作。 4. **批处理**(通过`DataLoader`): `torch.utils.data.DataLoader`是对`Dataset`的扩展,它负责从`Dataset`按批次抽取数据,并可能对数据进行批处理(如分片、打乱顺序等)。例如: ```python train_loader = torch.utils.data.DataLoader( CustomDataset('train_dataset.txt'), batch_size=32, shuffle=True, num_workers=4 # 并行加载数据 ) ``` 这里设置了每个批次有32个样本,数据会在每次迭代开始前被打乱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值