pytorch DataLoader处理不定长序列

2023-05-16

本篇博客的目的是:
将下图这样的输入(每个tensor表示一个句子,01为句子标签):
在这里插入图片描述
转化为下图所示的输出(batch_size=2)
元组的第一个元素为填充后的句子向量,第二个元素为句子长度,第三个元素为句子的label。
在这里插入图片描述
为什么需要这样的处理?
    如果需要使用RNN模型处理序列数据,肯定不能将变长的序列直接输入模型,所以需要在输入前对其进行填充。这里需要注意的是,在有些情况下,输入数据不仅需要填充,并且需要在数据传送过程中记录句子的原始长度,例如在RNN中,如果句子长度差别较大,例如最大长度是50,但大多数句子长度<10,这样会导致很多句子中有很多填充的0,这会导致最后得到的hn是相同的。

第一步:建立Dataset
class SentenceDataSet(Dataset):
    def __init__(self, sent, sent_label):
        self.sent = sent
        self.sent_label = sent_label

    def __getitem__(self, item):
        return self.sent[item], self.sent_label[item]

    def __len__(self):
        return len(self.sent)


dataset = SentenceDataSet(x, y)

for xi, yi in dataset:
    print(xi, yi)

输出为:
在这里插入图片描述

第二步:建立DataLoader

    在建立dataloader时需要注意:默认情况下dataloader会将batch中的所有数据条目的各个维度的数据直接进行拼接,由于在本博客的例子中句子序列的长度不相等,不能直接拼接,所以下面通过自己实现collate_fn函数自定义batch中的多个数据条目的组织方式。

def collate_fn(batch_data):
    """
    自定义 batch 内各个数据条目的组织方式
    :param data: 元组,第一个元素:句子序列数据,第二个元素:长度 第2维:句子标签
    :return: 填充后的句子列表、实际长度的列表、以及label列表
    """
    # batch_data 为一个batch的数据组成的列表,data中某一元素的形式如下
    # (tensor([1, 2, 3, 5]), 4, 0)
    # 后续将填充好的序列数据输入到RNN模型时需要使用pack_padded_sequence函数
    # pack_padded_sequence函数要求要按照序列的长度倒序排列
    batch_data.sort(key=lambda xi: len(xi[0]), reverse=True)
    data_length = [len(xi[0]) for xi in batch_data]
    sent_seq = [xi[0] for xi in batch_data]
    label = [xi[2] for xi in batch_data]
    padded_sent_seq = pad_sequence(sent_seq, batch_first=True, padding_value=0)
    return padded_sent_seq, data_length, torch.tensor(y, dtype=torch.float32)


# 将dataset封装为data_loader
data_loader = DataLoader(dataset, batch_size=2, collate_fn=collate_fn)

for data in data_loader:
    print(data)

输出:
在这里插入图片描述

参考链接
pytorch dataloader官方教程
博客:处理LSTM+embedding变长序列

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytorch DataLoader处理不定长序列 的相关文章

  • 游戏下载

    极品飞车8之地下狂飙2中文版 解压密码 http haogame wywz com 大小 1200M 语种 简体中文 下载地址 CD1 http down ggdown com 8808 ggdowns NFS8 CD1 rar CD2 h
  • 二分答案策略--TT 的神秘礼物

    问题描述 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT
  • DirectX 9.0 C 多国语言正式版(官方下载)

    微软终于放出了DirectX 9 0c官方正式版 xff0c 此最新版的版本号与先前报道的在微软XP SP2 2126测试版补丁中所集成的版本一样 xff0c 同为4 09 0000 0904 xff0c 但此版本为最终零售版 有消息说微软
  • 最近游戏更新 未整理 无图片

    点击下载 gt FIFA2003 硬盘版本 http www gzcrc com it it benapple fifa2003 zip FIFA2003正式硬盘版高速下载 FIFA2003 EXE安装文件开始安装 xff0c 在安装完成后
  • 最近游戏更新 未整理 无图片 续

    模拟人生之超级明星 xff08 The Sims Superstar xff09 三项属性修改器 http patch ali213 net download asp id 61 2872 黑客帝国 xff08 Enter the Matr
  • 中兴BA510(中国移动定制机)进工程模式恢复IMEI

    1 拨号盘输入 3646633 再拨号 xff0c 或者 3646633 xff0c 进入工程模式 2 找到RADIO information xff1a phone 1输入 AT 43 EMGR 61 1 7 34 IMEI号码1 34
  • excel 2007的筛选和自定义筛选及复制选中的筛选内容

    筛选 xff1a 选中行 xff0c 按快捷键 xff1a ALT 43 D 43 F 43 F 弹出自定义筛选 xff1a 选中列 xff0c 按快捷键 xff1a ALT 43 43 F 43 F 复制选中的筛选出来的内容 xff1a
  • Java编译环境在新版windows10中的设置

    最近升级了windows10最新版 xff0c 发现系统环境变量变了模样 xff0c 需要单独设置每个路径 xff0c 前版本 xff1a 变量名 xff1a Path 变量值 xff1a JAVA HOME bin JAVA HOME j
  • Windows系统与debian系统双系统安装

    1 资源网址 xff1a https msdn itellyou cn 下载 Windows 8 1 Pro 系统映像 xff1b 使用软碟通 xff08 UltraISO xff09 刻录安装镜像到U盘 xff1b 开机进入BIOS将其设
  • Win10使用Xrdp脚本远程桌面连接Ubuntu主机

    目录 使用场景 环境 安装步骤 远程桌面连接 使用场景 在Ubuntu主机上安装xrdp服务 xff0c windows远程桌面连接ubuntu主机 xff0c 方便快捷 尝试了网上一些方法 xff0c 繁琐且很多卡在远程桌面登录界面 xf
  • cef中js与C++交互

    cefquery方式交互 前端使用 window span class token punctuation span span class token function cefQuery span span class token punc
  • CodeForces 347C Alice and Bob

    在一个有n个不同数的集合里面 xff0c Alice 和Bob分别任选两个数 xff0c x y 要求 x y 不在集合中 xff0c 如果有一个人不能选 xff0c 则输了 xff0c Alice 先选择 求最后的胜利者 分析 xff0c
  • gopls安装失败后,解决问题的后续思路

    gopls安装失败后 xff0c 解决问题的后续思路 文档不严谨 xff0c 问题没有得到根本解决 xff0c 仅作为解决思路和现有线索的一个记录 vim go要求安装一个gopls的依赖包 xff0c 尝试的解决方法 但是直接安装的时候
  • 树莓派3B 环境搭建

    目录 前期准备获取系统格式化SD卡给SD卡烧录系统镜像上电调试查询树莓派IP在路由器中查看连入的设备分配的IP 查看PC的ARP表SSH连接配置树莓派 前期准备 首先 xff0c 需要一块树莓派3B 3B 43 的开发板 xff0c 然后需
  • 不想使用notepad++,快使用notepad--来替换

    相信越来越多的人已经认识到notepad 43 43 作者的可恶了 xff0c 我曾经也是notepad 43 43 的使用者 xff0c 当我看到它的作者一个台湾人 xff0c 明目张胆的利用软件开始宣传他的错误观点后 xff0c 便觉得
  • 替代Notepad++,可以试下notepad--,专门针对Notepad++替代而开发的简洁编辑器

    Nopepad 是一款使用C 43 43 编写的文本编辑器 可以支持Win Linux Mac平台 目标是要替换Notepad 43 43 xff0c 重点在国产Uos系统 Mac 系统上发展 一个支持windows linux mac的文
  • 把国外软件替换出去!Notepad--

    有程序员同行说 xff0c 自己不甘心只打工 xff0c 还想做点什么 对此我深有感触 打工十多年了 xff0c 除了颈椎越来越僵硬 xff0c 年岁越来越大 xff0c 被老板嫌弃以外 xff0c 没有其它可以拿出手的东西 我们都忘记了
  • 广播机制

    1 Android中的广播主要可以分为两种类型 xff0c 标准广播和有序广播 1 标准广播 xff08 Normal broadcasts xff09 是一种完全异步执行的广播 xff0c 在广播发出之后 xff0c 所有的广播接收器几乎
  • 洛谷——P3366 【模板】最小生成树

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入格式 xff1a 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff08 N lt
  • 网易云音乐缓存转换至mp3(Python实现)

    网易云音乐越来越多歌曲成VIP了 收获大批固定用户后 xff0c 开始恰饭了 利用python从缓存文件中获取MP3主要包括以下流程 xff1a 1 对缓存文件的数据和0xa3 163 进行异或 运算 2 用歌曲ID用网易云提供的API去获

随机推荐

  • Week4 作业 A - DDL 的恐惧【贪心算法】

    题目大意 给定n个作业ddl xff0c 以及每个作业如果没有按时完成扣掉的分数 ddl和分数都用整数表示 xff0c 一天可以完成一个作业 xff0c 求最少得扣多少分 输入 输入包含T个测试用例 输入的第一行是单个整数T xff0c 为
  • 关于如何快速删除流氓进程AlibabaProtect

    本人由于安装优酷客户端 删除后客户端后发现被莫名其妙安装了AlibabaProtect的文件夹和相关进程 而且打开任务管理器 xff0c 发现该进程还相当的吃资源 据介绍 该进程相当的流氓 但是却无法直接结束该进程 c盘下的 Program
  • Week4 作业 C - TT的神秘礼物【二分答案】

    题目描述 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT
  • Week5 作业D - 滑动窗口[POJ - 2823]

    题目大意 输入 输出 基本思路 这个题的数据规模较大 xff0c k和n最大可以达到1e6 xff0c 因此如果我们暴力判断所有区间 窗口内元素的范围 中的最大值和最小值一定会超时 复杂度 O n 2
  • Week6限时大模拟 A - 掌握魔法の东东 II [Gym - 270437J]

    原题链接 https vjudge net problem Gym 270437J origin 题意 基本思路 本题数据规模不大 xff0c A B 100 A B 100
  • Clion环境下C++调用Python

    前提条件 已经安装好python环境 我使用的是Anaconda3 xff0c Python版本是3 7 安装好Clion 我使用的是CLion 2019 2 5 可能需要配置环境变量 我之前已经将python相关的环境变量配置好了 xff
  • Week13 作业A - TT 的神秘任务1[CodeForces - 1352B]

    题目描述 给定两个正整数n xff0c k xff0c 要求给出 k 个奇偶性相同的正整数 xff0c 使得其和等于 n 输入 第一行一个整数 T xff0c 表示数据组数 xff0c 不超过 1000 之后 T 行 xff0c 每一行给出
  • Week13 作业B - TT 的神秘任务2[CodeForces - 1352C]

    题目描述 给定两个整数n xff0c k xff0c 要求给出无法被n整除的第k个正整数 输入 第一行一个整数 T xff0c 表示数据组数 xff0c 不超过 1000 之后 T 行 xff0c 每一行给出两个正整数 xff0c 分别表示
  • CSP 201809-3 元素选择器(C++)

    题目描述 基本思路 过程及结构 问题解决方法过程及结构如下图所示 其中 xff0c read负责读取层叠样式信息 xff0c read query负责读取查询信息 读取一条处理一条 xff0c query负责处理一条查询信息 xff0c q
  • Week9 作业B - 东东学打牌 [计蒜客 - 41408]

    原题链接 https nanti jisuanke com t 41408 题目描述 基本思路 本题的关键问题在于玩家的排序 xff0c 首先根据手牌情况进行排序 xff0c 若手牌相同 xff0c 则根据name进行排序 为了更加方便的进
  • Week12作业 C -必做题 - 3 [HDU - 1024]

    题目链接 https vjudge net problem HDU 1024 题目描述 n个数的序列a xff0c 从中选取m个互不相交的闭区间 xff0c 使这些区间中的数的和最大 xff0c 输出最大和 1 i n 1e6 32768
  • 实验与分析 —— numpy.vectorize

    函数功能 numpy vectorize函数可以实现任意函数的向量化 xff0c 从而避免在python中使用循环 xff0c 提高效率 还真不一定能提高效率 另外 xff0c 用好函数的signature参数 xff0c 可以让本来就是处
  • nist sp 800-90(A|B|C) series RNG三部曲

    随机数生成器 熵源 随机比特生成器构造 一个公共的随机数信标 randomness beacon NIST Special Publication 800 90A Recommendation for Random Number Gener
  • [LeetCode 1765] 地图中的最高点

    文章目录 题目链接题目描述用例提示思路代码 题目链接 https leetcode cn com problems map of highest peak 题目描述 给你一个大小为m x n的整数矩阵isWater xff0c 它代表了一个
  • [LeetCode 1763] 最长的美好子字符串 [参考]

    文章目录 题目链接题目描述示例1示例2示例3示例4提示题解1题解2题解3 参考自官方题解 这是简单题 xff1f xff1f xff1f 数据规模后边加3个0直接玩完 题目链接 https leetcode cn com problems
  • 直方图均衡化原理推导

    问题描述 对于服从任意分布的连续型随机变量 R 0 R 1
  • 给吃饭嘎嘎香的李峋爱心代码

    span class token keyword import span random span class token keyword from span math span class token keyword import span
  • Linux服务器启动jar包报启动main类ClassNotFoundException

    Linux服务器启动jar包报启动main类启动异常 今天部署文件时遇到了启动异常报错 xff0c 在网上找了好久没发现我要的答案 xff0c 没办法只能自己找一下问题了 事件回顾 和往常一样打了个jar包就往服务器上扔 xff0c 启动时
  • sql中json数据的提取保存

    sql中json数据的提取保存 文章目录 sql中json数据的提取保存1 需求描述2 数据构建3 Json类型数据的提取令存3 1 代码分析3 2 结果呈现 4 jsonselect Onecount4 1 单key值需求4 2 代码编辑
  • pytorch DataLoader处理不定长序列

    本篇博客的目的是 xff1a 将下图这样的输入 xff08 每个tensor表示一个句子 xff0c 01为句子标签 xff09 xff1a 转化为下图所示的输出 xff08 batch size 61 2 xff09 元组的第一个元素为填