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参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3 lambda表达式详解

    python3 lambda表达式详解

    本文主要给大家详细介绍的是Python3中的lambda表达式的语法和用法,非常的详细,有需要的小伙伴可以参考下
    2021-05-05
  • python程序的打包分发示例详解

    python程序的打包分发示例详解

    这篇文章主要为大家介绍了python程序的打包分发示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python算法应用实战之队列详解

    Python算法应用实战之队列详解

    队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。队列被用在很多地方,比如提交操作系统执行的一系列进程、打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客。下面就介绍了Python中队列的应用实战,需要的可以参考。
    2017-02-02
  • pytorch通过自己的数据集训练Unet网络架构

    pytorch通过自己的数据集训练Unet网络架构

    Unet是一个最近比较火的网络结构。它的理论已经有很多大佬在讨论了。本文主要从实际操作的层面,讲解如何使用pytorch实现unet图像分割
    2022-12-12
  • Python中的面向对象编程详解(上)

    Python中的面向对象编程详解(上)

    这篇文章主要介绍了Python中的面向对象编程详解(上),本文讲解了创建类、实例化类、类属性、特殊方法内建属性、静态变量属性、实例变量属性、方法属性、静态方法、类方法等内容,需要的朋友可以参考下
    2015-04-04
  • Python基础知识方法重写+文件处理+异常处理

    Python基础知识方法重写+文件处理+异常处理

    这篇文章主要介绍了Python基础知识方法重写+文件处理+异常处理,这是基础知识分享的第四篇,看到这里了相信大家前几篇都学得还不错吧,下面我们继续巩固Python基础知识,需要的朋友也可以参考一下
    2022-05-05
  • Python 多线程超详细到位总结

    Python 多线程超详细到位总结

    线程在程序中是独立的、并发的执行流。与分隔的进程相比,进程中线程之间的隔离程度要小,它们共享内存、文件句柄和其他进程应有的状态。线程的划分尺度小于进程,使多线程程序的并发性高。进程在执行过程中拥有独立内存单元,而多个线程共享内存,从而提升程序运行效率
    2021-11-11
  • 在Python中通过threshold创建mask方式

    在Python中通过threshold创建mask方式

    今天小编就为大家分享一篇在Python中通过threshold创建mask方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • pandas基础 Series与Dataframe与numpy对二进制文件输入输出

    pandas基础 Series与Dataframe与numpy对二进制文件输入输出

    这篇文章主要介绍了pandas基础Series与Dataframe与numpy对二进制文件输入输出,series是一种一维的数组型对象,它包含了一个值序列和一个数据标签
    2022-07-07
  • Python实现打乒乓小游戏

    Python实现打乒乓小游戏

    这篇文章主要为大家详细介绍了Python实现打乒乓小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论