Pytorch使用技巧之Dataloader中的collate_fn参数详析

 更新时间:2022年03月17日 10:17:29   作者:政在学习  
collate_fn 参数的目的主要是为了随心所欲的转变数据的类型,这个数据是用DataLoader加载的,比如img,target,下面这篇文章主要给大家介绍了关于Pytorch使用技巧之Dataloader中的collate_fn参数的相关资料,需要的朋友可以参考下

以MNIST为例

from torchvision import datasets
mnist = datasets.MNIST(root='./data/', train=True, download=True)
print(mnist[0])

结果

(<PIL.Image.Image image mode=L size=28x28 at 0x196E3F1D898>, 5)

MINIST数据集的dataset是由一张图片和一个label组成的元组

dataloader = torch.utils.data.DataLoader(dataset=mnist, batch_size=2, shuffle=True,collate_fn=lambda x:x)
for each in dataloader:
    print(each)
    break

结果

[(<PIL.Image.Image image mode=L size=28x28 at 0x2CB3B105630>, 0), (<PIL.Image.Image image mode=L size=28x28 at 0x2CB3B105668>, 2)]

collate_fn为lamda x:x时表示对传入进来的数据不做处理

下面自定义collate_fn看看什么效果

def collate(data):
    img = []
    label = []
    for each in data:
        img.append(each[0])
        label.append(each[1])
    return img,label
dataloader = torch.utils.data.DataLoader(dataset=mnist, batch_size=2, shuffle=True,collate_fn=lambda x:collate(x))
for each in dataloader:
    print(each)
    break

结果

([<PIL.Image.Image image mode=L size=28x28 at 0x241433A36D8>, <PIL.Image.Image image mode=L size=28x28 at 0x241433A3710>], [9, 3])

说明:若不设置collate_fn参数则会使用默认处理函数

但必须保证传进来的数据都是tensor格式否则会报错

附:DataLoader完整的参数表如下:

class torch.utils.data.DataLoader(
    dataset,
    batch_size=1,
    shuffle=False,
    sampler=None,
    batch_sampler=None,
    num_workers=0,
    collate_fn=<function default_collate>,
    pin_memory=False,
    drop_last=False,
    timeout=0,
    worker_init_fn=None)

DataLoader在数据集上提供单进程或多进程的迭代器

几个关键的参数意思:

- shuffle:设置为True的时候,每个世代都会打乱数据集

- collate_fn:如何取样本的,我们可以定义自己的函数来准确地实现想要的功能

- drop_last:告诉如何处理数据集长度除于batch_size余下的数据。True就抛弃,否则保留

总结

到此这篇关于Pytorch使用技巧之Dataloader中的collate_fn参数的文章就介绍到这了,更多相关Dataloader中的collate_fn参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析NumPy 切片和索引

    浅析NumPy 切片和索引

    这篇文章主要介绍了NumPy 切片和索引的相关资料,帮助大家更好的理解和学习NumPy的相关知识,感兴趣的朋友可以了解下。
    2020-09-09
  • Python编程之顺序执行与程序的主入口详解

    Python编程之顺序执行与程序的主入口详解

    程序从程序入口进入,到程序执行结束,大体是按照顺序结构执行语句、函数或代码块,掌握程序的结构,有利于把握程序的主体框架,下面这篇文章主要给大家介绍了关于Python编程之顺序执行与程序的主入口的相关资料,需要的朋友可以参考下
    2022-12-12
  • Python模块Typing.overload的使用场景分析

    Python模块Typing.overload的使用场景分析

    在 Python 中,typing.overload 是一个用于定义函数重载的装饰器,函数重载是指在一个类中可以定义多个相同名字但参数不同的函数,使得在调用函数时可以根据参数的不同选择不同的函数执行,这篇文章主要介绍了Python模块Typing.overload的使用,需要的朋友可以参考下
    2024-02-02
  • Python实现生命游戏的示例代码(tkinter版)

    Python实现生命游戏的示例代码(tkinter版)

    生命游戏是由剑桥大学约翰·何顿·康威设计的计算机程序,一时吸引了各行各业一大批人的兴趣。本文将用Python实现这一游戏,感兴趣的可以尝试一下
    2022-08-08
  • Pytorch-mlu 实现添加逐层算子方法详解

    Pytorch-mlu 实现添加逐层算子方法详解

    本文主要分享了在寒武纪设备上 pytorch-mlu 中添加逐层算子的方法教程,代码具有一定学习价值,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • python批量修改文件名的示例

    python批量修改文件名的示例

    这篇文章主要介绍了python批量修改文件名的示例,帮助大家更好的使用python处理文件,感兴趣的朋友可以了解下
    2020-09-09
  • Python编程应用设计原则详解

    Python编程应用设计原则详解

    什么是好用的代码呢?其实就是代码质量比较高,如何评价代码质量的高低呢?最常用的、最重要的评价标准,就是代码的可维护性、可读性、可扩展性、灵活性、简洁性、可复用性、可测试性
    2021-09-09
  • python实现将两个文件夹合并至另一个文件夹(制作数据集)

    python实现将两个文件夹合并至另一个文件夹(制作数据集)

    这篇文章主要介绍了python实现将两个文件夹合并至另一个文件夹(制作数据集),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python实现的根据IP地址计算子网掩码位数功能示例

    Python实现的根据IP地址计算子网掩码位数功能示例

    这篇文章主要介绍了Python实现的根据IP地址计算子网掩码位数功能,涉及Python数值运算相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • Django实现组合搜索的方法示例

    Django实现组合搜索的方法示例

    本篇文章主要介绍了Django实现组合搜索的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论