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设计模式之单例模式实例
Apr 26 Python
Python中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
用Python展示动态规则法用以解决重叠子问题的示例
Apr 02 Python
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
python3.6的venv模块使用详解
Aug 01 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
python根据文本生成词云图代码实例
Nov 15 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
简述vue中的config配置
2018/01/23 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
C++的几个面试题附答案
2016/08/03 面试题
家长给孩子的表扬信
2014/01/17 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
运动会口号8字
2014/06/07 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
毕业欢送会致辞
2015/07/29 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
Pandas-DataFrame知识点汇总
2022/03/16 Python
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android