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算法学习之计数排序实例
Dec 18 Python
python字符串替换示例
Apr 24 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
详解python里的命名规范
Jul 16 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
Python如何实现转换URL详解
Jul 02 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
Python数据可视化图实现过程详解
Jun 12 Python
深入了解Python装饰器的高级用法
Aug 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
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
discuz目录文件资料汇总
2014/12/30 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
python求众数问题实例
2014/09/26 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
J2EE模式面试题
2016/10/11 面试题
竞聘演讲稿范文
2014/01/12 职场文书
一年级小学生评语大全
2014/12/25 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
特种设备安全管理制度
2015/08/06 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python