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 相关文章推荐
在Django中编写模版节点及注册标签的方法
Jul 20 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
浅述python中深浅拷贝原理
Sep 18 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
python设计tcp数据包协议类的例子
Jul 23 Python
Python如何访问字符串中的值
Feb 09 Python
python 代码运行时间获取方式详解
Sep 18 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
Python  lambda匿名函数和三元运算符
Apr 19 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下MYSQL limit的优化
2008/01/10 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
PHP实现微信退款功能
2018/10/02 PHP
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
Python中创建二维数组
2018/10/17 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
三方协议书范本
2014/04/22 职场文书
门卫岗位职责
2015/02/09 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书