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内置函数OCT详解
Nov 09 Python
Python进阶_关于命名空间与作用域(详解)
May 29 Python
详解python eval函数的妙用
Nov 16 Python
django解决跨域请求的问题
Nov 11 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
python 一维二维插值实例
Apr 22 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
python飞机大战游戏实例讲解
Dec 04 Python
Autopep8的使用(python自动编排工具)
Mar 02 Python
python使用torch随机初始化参数
Mar 22 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
jquery之empty()与remove()区别说明
2010/09/10 Javascript
jQuery Clone Bug解决代码
2010/12/22 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
Angular2中select用法之设置默认值与事件详解
2017/05/07 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
公司成立感言
2014/01/11 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
社会学专业求职信
2014/07/17 职场文书
2014年政协工作总结
2014/12/09 职场文书
毕业实习证明范本
2015/06/16 职场文书
关于车尾的标语大全
2015/08/11 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
一篇文章带你复习java知识点
2021/06/28 Java/Android