Pytorch DataLoader 变长数据处理方式


Posted in Python onJanuary 08, 2020

关于Pytorch中怎么自定义Dataset数据集类、怎样使用DataLoader迭代加载数据,这篇官方文档已经说得很清楚了,这里就不在赘述。

现在的问题:有的时候,特别对于NLP任务来说,输入的数据可能不是定长的,比如多个句子的长度一般不会一致,这时候使用DataLoader加载数据时,不定长的句子会被胡乱切分,这肯定是不行的。

解决方法是重写DataLoader的collate_fn,具体方法如下:

# 假如每一个样本为:
sample = {
	# 一个句子中各个词的id
	'token_list' : [5, 2, 4, 1, 9, 8],
	# 结果y
	'label' : 5,
}


# 重写collate_fn函数,其输入为一个batch的sample数据
def collate_fn(batch):
	# 因为token_list是一个变长的数据,所以需要用一个list来装这个batch的token_list
  token_lists = [item['token_list'] for item in batch]
  
  # 每个label是一个int,我们把这个batch中的label也全取出来,重新组装
  labels = [item['label'] for item in batch]
  # 把labels转换成Tensor
  labels = torch.Tensor(labels)
  return {
    'token_list': token_lists,
    'label': labels,
  }


# 在使用DataLoader加载数据时,注意collate_fn参数传入的是重写的函数
DataLoader(trainset, batch_size=4, shuffle=True, num_workers=4, collate_fn=collate_fn)

使用以上方法,可以保证DataLoader能Load出一个batch的数据,load出来的东西就是重写的collate_fn函数最后return出来的字典。

以上这篇Pytorch DataLoader 变长数据处理方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python开发vim插件及心得分享
Nov 04 Python
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
Python计算一个文件里字数的方法
Jun 15 Python
python 循环while和for in简单实例
Aug 16 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
python中利用zfill方法自动给数字前面补0
Apr 10 Python
使用python socket分发大文件的实现方法
Jul 08 Python
Python PyQt5整理介绍
Apr 01 Python
Python批量安装卸载1000个apk的方法
Apr 10 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
总结Python连接CS2000的详细步骤
Jun 23 Python
Python基本的内置数据类型及使用方法
Apr 13 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 #Python
使用pytorch和torchtext进行文本分类的实例
Jan 08 #Python
python爬虫爬取监控教务系统的思路详解
Jan 08 #Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 #Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
Jan 08 #Python
Pytorch实现神经网络的分类方式
Jan 08 #Python
python 爬取古诗文存入mysql数据库的方法
Jan 08 #Python
You might like
一个程序下载的管理程序(一)
2006/10/09 PHP
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
PHP获取文件行数的方法
2015/06/10 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
学习vue.js计算属性
2016/12/03 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
Python 2与Python 3版本和编码的对比
2017/02/14 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
What is EJB
2016/07/22 面试题
Java程序开发中如何应用线程
2016/03/03 面试题
个人简历自我评价
2014/01/06 职场文书
通信生自我鉴定
2014/01/18 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
给领导的感谢信范文
2015/01/23 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
基于Python实现将列表数据生成折线图
2022/03/23 Python