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中列表生成式的用法
Mar 31 Python
python链接Oracle数据库的方法
Jun 28 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
用Python写王者荣耀刷金币脚本
Dec 21 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
tensorflow实现加载mnist数据集
Sep 08 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python基于scipy实现信号滤波功能
May 08 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
python让函数不返回结果的方法
Jun 22 Python
如何编写python的daemon程序
Jan 07 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使用socket发送HTTP请求的方法
2016/02/14 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
js中this用法实例详解
2015/05/05 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
Python subprocess模块详细解读
2018/01/29 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
详解Python中的路径问题
2020/09/02 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
python生成word合同的实例方法
2021/01/12 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
企业后勤岗位职责
2014/02/28 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
学习计划书怎么写
2014/09/15 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers
httpclient调用远程接口的方法
2022/08/14 Java/Android