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系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
wxpython学习笔记(推荐查看)
Jun 09 Python
Python中replace方法实例分析
Aug 20 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
详解Python之unittest单元测试代码
Jan 24 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
wxPython色环电阻计算器
Nov 18 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
python实现横向拼接图片
Mar 23 Python
Pycharm配置autopep8实现流程解析
Nov 28 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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
php实现小程序支付完整版
2018/10/09 PHP
JavaScript 指导方针
2007/04/05 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
Python中的time模块与datetime模块用法总结
2016/06/30 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
python中的时区问题
2021/01/14 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
旅游网创业计划书
2014/01/31 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
三字经教学反思
2014/04/26 职场文书
搞笑爱情保证书
2014/04/29 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
申报材料格式
2014/12/30 职场文书
岳麓书院导游词
2015/02/03 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
教学副校长工作总结
2015/08/13 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python