第N2周:NLP中的数据集构建
对于初学者,NLP中最烦人的问题之一就数据集的构建问题,处理不好就会引起shape问题(各种由于shape错乱导致的问题)。这里给出一个模版,大家可根据这个模版来构建。
torch.utils.data是PyTorch中用于数据加载和预处理的模块。其中包括Dataset和DataLoader两个类,它们通常结合使用来加载和处理数据。
一、Dataset
torch.utils.data.Dataset是一个抽象类,用于表示数据集。它需要用户自己实现两个方法:__ len__ 和__getitem__。其中,__len__方法返回数据集的大小,__getitem__方法用于根据给定的索引返回一个数据样本。
以下是一个简单的示例,展示了如何定义一个数据集:
import torch
from torch import nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import DataLoader, Datasetclass MyDataset(Dataset):def __init__(self, texts, labels):self.texts = textsself.labels = labelsdef __len__(self):return len(self.labels)def __getitem__(self, idx):texts = self.texts[idx]labels = self.labels[idx]return texts, labels
在这个示例中,MyDataset继承了torch.utils.data.Dataset类,并实现了__len__和__getitem__方法。__len__方法返回数据集的大小,这里使用了Python内置函数len。__getitem__方法根据给定的索引返回一个数据样本,这里返回的是数据列表中对应的元素。
二、DataLoader
torch.utils.data.DataLoader是PyTorch中一个重要的类,用于高效加载数据集。它可以处理数据的批次化、打乱顺序、多线程数据加载等功能。
以下是一个简单的示例:
# 假设我们有以下三个样本,分别由不同数量的单词索引组成
text_data = [torch.tensor([1, 2, 3, 4], dtype=torch.long), # 样本1torch.tensor([4, 3, 2], dtype=torch.long), # 样本2torch.tensor([1, 2], dtype=torch.long) # 样本3
]# 对应的标签
labels = torch.tensor([1, 0, 1], dtype=torch.float)# 创建数据集和数据加载器
my_dataset = MyDataset(text_data, labels)
data_loader = DataLoader(my_dataset, batch_size=2, shuffle=True, collate_fn=lambda x: x)for batch in data_loader:print(batch)
代码输出
[(tensor([4, 3, 2]), tensor(0.)), (tensor([1, 2]), tensor(1.))]
[(tensor([1, 2, 3, 4]), tensor(1.))]
在这个示例中,我们首先创建了一个MyDataset实例my_dataset,它包含了一个整数列表。然后,我们使用DataLoader类创建了一个数据加载器data_loader,它将data_loader作为输入,并将数据分成大小为4的批次,并对数据进行随机化。最后,遍历data_loader,并打印出每个批次的数据。
三、DataLoader参数讲解
函数原型:
DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,
batch_sampler=None, num_workers=0, collate_fn=None,
pin_memory=False, drop_last=False, timeout=0,
worker_init_fn=None, *, prefetch_factor=2,
persistent_workers=False)
常用的参数:
1.dataset:一个数据集对象,必须实现__len__和__getitem__方法。
2.batch_size:每个batch的大小。
3.shuffle:是否对数据进行洗牌(随机打乱)。
4.sampler:一个数据采样器,用于对数据进行自定义采样。
5.batch_sampler:一个batch采样器,用于对batch进行自定义采样。
6.num_workers:用于数据加载的子进程数量。默认值为0,表示在主进程中加载数据。
7.collate_fn:用于将一个batch的数据合并成一个张量或者元组。
8.pin_memory:是否将数据存储在pin memory中(锁定物理内存,用于GPU加速数据传输),默认值为False。
9.drop_last:如果数据不能完全分成batch,是否删除最后一批数据。默认为False。
10.timeout:当数据加载器陷入死锁时,等待数据准备的最大秒数。默认值为0,表示无限等待。
11.worker_init_fn:用于每个数据加载器进程的初始化函数。可以用来设置特定的随机种子。
12.multiprocessing_context:用于创建数据加载器子进程的上下文。
以上是torch.utils.data.DataLoader中一些常用的参数,使用时根据实际情况选择相应的参数组合。
sampler参数详解:
sampler是一个用于指定数据集采样方式的类,它控制DataLoader如何从数据集中选取样本。PyTorch提供了多种Sampler类,例如RandomSampler和SequentialSampler,分别用于随机采样和顺序采样。
以下是一个示例:
from torch.utils.data.sampler import RandomSamplermy_sampler = RandomSampler(my_dataset)my_dataloader = data.DataLoader(my_dataset, batch_size=4, shuffle=False, sampler=my_sampler)
在这个示例中,我们使用RandomSampler类来指定随机采样方式,然后将其传递给DataLoader的sampler参数。这将覆盖默认的shuffle参数,使数据集按照sampler指定的采样方式进行
四、自定义Dataset类
除了使用torchvision.datasets中提供的数据集,我们还可以使用torch.utils.data.Dataset类来自定义自己的数据集。自定义数据集需要实现__len__和__getitem__方法。
●__init__: 用来初始化数据集
●__len__:方法返回数据集中样本的数量
●__getitem__:给定索引值,返回该索引值对应的数据;它是python built-in方法,其主要作用是能让该类可以像list一样通过索引值对数据进行访问
class MyDataset(data.Dataset):def __init__(self, data_path):self.data_list = torch.load(data_path)def __len__(self):return len(self.data_list)def __getitem__(self, index):x = self.data_list[index][0]y = self.data_list[index][1]return x, y
在这个示例中,MyDataset类继承自torch.utils.data.Dataset类,实现了__len__和__getitem__方法。MyDataset类的构造函数接受一个数据路径作为参数,数据集被保存为一个由数据-标签对组成的列表。
五、自定义Sampler类
除了使用torch.utils.data.sampler中提供的采样器,我们还可以使用Sampler类来自定义自己的采样器。自定义采样器需要实现__iter__和__len__方法。
●__iter__方法返回一个迭代器,用于遍历数据集中的样本索引。
●__len__方法返回数据集中样本的数量。
以下是一个示例:
class MySampler(Sampler):def __init__(self, data_source):self.data_source = data_sourcedef __iter__(self):return iter(range(len(self.data_source)))def __len__(self):return len(self.data_source)
在这个示例中,MySampler类继承自torch.utils.data.sampler.Sampler类,实现了__iter__和__len__方法。
六、自定义Transform类
除了使用torchvision.transforms中提供的变换,我们还可以使用transforms模块中的Compose类来自定义自己的变换。Compose类将多个变换组合在一起,并按照顺序应用它们。
以下是一个示例:
class MyTransform(object):def __call__(self, x):x = self.crop(x)x = self.to_tensor(x)return xdef crop(self, x):# 这里实现裁剪变换# .......return xdef to_tensor(self, x):# 这里实现张量化变换# .......return xmy_transform = transforms.Compose([MyTransform()
])# 创建数据集和数据加载器
my_dataset = MyDataset(data_path)
my_dataloader = DataLoader(my_dataset, batch_size=32, shuffle=True, num_workers=4)# 遍历数据集
for batch in my_dataloader:# 在这里处理数据批次pass
在这个示例中,MyTransform类实现了一个自定义的变换,它将裁剪和张量化两个变换组合在一起。transforms.Compose将这个自定义变换组合成一个变换序列,并在数据集中的每个样本上应用这个序列。
相关文章:
第N2周:NLP中的数据集构建
对于初学者,NLP中最烦人的问题之一就数据集的构建问题,处理不好就会引起shape问题(各种由于shape错乱导致的问题)。这里给出一个模版,大家可根据这个模版来构建。 torch.utils.data是PyTorch中用于数据加载和预处理的…...
AI助力浮雕创作!万物皆可浮雕?Stable Diffusion AI绘画【浮雕艺术】之文生浮雕!
前言 对于浮雕艺术,其实并不了解。但有幸能和“细辛”前辈结识,对浮雕有了简单的了解,浮雕图案的传统方式是先由画师画出图,然后由雕刻师雕刻。画师画图归为浮雕的设计阶段,画师会绘制出浮雕的设计图,这为…...
你觉得大模型时代该出现什么?
大模型的概念都火了两年了,之前各种媒体吹嘘大模型的出现是类似“蒸汽机时代”、“iPhone时刻”等等。那为什么我们期待的结果都没出现呢?咱们先一起回顾下历史。 1、蒸汽机时代 1.1、蒸汽机历史 许多人都在讨论大模型时代好像只是概念在火࿰…...
JS【详解】事件委托
事件委托的简介 事件委托(Event Delegation)是 JS 处理事件的一种技术:不直接在目标元素上设置事件监听器,而是在其父元素或祖先元素上设置监听器,然后利用事件冒泡机制来捕获和处理事件。 事件委托的好处 减少内存占用…...
谈对象系列:C++类和对象
文章目录 一、类的定义1.1类定义的格式类的两种定义方法结构体: 1.2访问限定符1.3类域 二、实例化2.1变量的声明和定义2.2类的大小计算空类的大小(面试): 三、this指针小考题 一、类的定义 1.1类定义的格式 使用class关键字&…...
设计模式20-备忘录模式
设计模式20-备忘录 动机定义与结构定义结构 C代码推导优缺点应用场景总结备忘录模式和序列化备忘录模式1. **动机**2. **实现方式**3. **应用场景**4. **优点**5. **缺点** 序列化1. **动机**2. **实现方式**3. **应用场景**4. **优点**5. **缺点** 对比总结 动机 在软件构建过…...
绘制echarts-liquidfill水球图
文章目录 一、效果图二、步骤1.安装插件2.引入2.主要代码2.素材图片 总结 一、效果图 二、步骤 1.安装插件 npm install echarts npm install echarts-liquidfillecharts5的版本与echarts-liquidfill3兼容,echarts4的版本与echarts-liquidfill2兼容,安装的时候需要…...
应急响应:D盾的简单使用.
什么是应急响应. 一个组织为了 应对 各种网络安全 意外事件 的发生 所做的准备 以及在 事件发生后 所采取的措施 。说白了就是别人攻击你了,你怎么把这个攻击还原,看看别人是怎么攻击的,然后你如何去处理,这就是应急响应。 D盾功…...
c语言第14天笔记
通过指针引用数组 数组元素的指针 数组指针:数组中的第一个元素的地址,也就是数组的首地址。 指针数组:用来存放数组元素地址的数组,称之为指针数组。 注意:虽然我们定义了一个指针变量接收了数组地址,但…...
服装行业QMS中的来料检验:常见问题解析与解决策略
在服装行业的来料检验过程中,常会遇到一系列问题,这些问题可能影响到原材料的质量,进而影响最终产品的品质。以下将详细介绍来料检验的常见问题及相应的解决方法: 一、常见问题 外观瑕疵 问题描述:原材料表面存在污渍…...
健身动作AI识别,仰卧起坐计数(含UI界面)
用Python和Mediapipe打造,让你的运动效果一目了然! 【技术揭秘】 利用Mediapipe的人体姿态估计,实时捕捉关键点,精确识别动作。 每一帧的关键点坐标和角度都被详细记录,为动作分析提供数据支持。 支持自定义动作训练&a…...
GitHub开源金融系统:Actual
Actual:电子金融,本地优先,自由开源- 精选真开源,释放新价值。 概览 Actual的创新之处在于其对个人财务管理的全面考虑,它不仅仅是一个简单的记账工具,而是一个综合性的理财解决方案。它的本地优先设计意味…...
【学习笔记】Day 7
一、进度概述 1、DL-FWI基础入门培训笔记 2、inversionnet_train 试运行——未成功 二、详情 1、InversionNet: 深度学习实现的反演 InversionNet构建了一个具有编码器-解码器结构的卷积神经网络,以模拟地震数据与地下速度结构的对应关系。 (一…...
网络中特殊的 IP 地址
特殊网络 IP 127.0.0.1 127.0.0.1 是本机回送地址,发送到 127.0.0.1 的数据或者从 127.0.0.1 返回的数据只会在本机进行传输, 而不进行外部网络传输。 主要有以下两个作用: 测试本机网络 当我们可以 ping 通 127.0.0.1 的时候, 则说明本机的网卡以及 tc…...
ASP 表单处理入门指南
ASP 表单处理入门指南 简介 ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于动态生成交互性网页。它允许开发者结合HTML、VBScript或JScript脚本语言来创建和运行动态网页或Web应用程序。本文将重点介绍如何使用ASP来处理表单数据,包括表单的创建、数据…...
极米RS10Plus性价比高吗?7款4-6K价位投影仪测评哪款最好
通常家庭想买个投影仪都会选择4-6K这个价位段的投影仪,3K以下的投影配置太低,6K以上的价格略高,4-6K价位段的中高端投影仪正好满足大部分家庭的使用需求。正好极米投影在8月份上新了一款Plus版本的长焦投影:极米RS10Plusÿ…...
RocketMQ怎么对文件进行读写的?
RocketMQ 对文件的读写主要依赖于其底层的存储机制,核心组件是 CommitLog 和 ConsumeQueue,并且通过 MappedFile 类来进行高效的文件操作。以下是 RocketMQ 文件读写的详细介绍: 1. CommitLog CommitLog 是 RocketMQ 的核心存储文件&#x…...
智慧宠物护理:智能听诊器引领健康监测新潮流
在宠物健康科技的浪潮中,智能听诊器的诞生标志着宠物健康管理迈向了智能化的新纪元。广州坎普利智能信息科技有限公司的创新产品,正为宠物主人和他们的毛茸茸伙伴带来前所未有的关怀体验。 创新特点 这款智能听诊器,以其前沿科技和人性化设…...
SRE工程师第2天:我只要截图功能 而不是打开微信
大家好,我是watchpoints 别想太多,只管去提问,所有问题,都会有答案 watchpoints是我github用户名 , 也是我的wechat 用户名,如果我有讲不明白 欢迎提问 什么是SRE(Site Reliability Engineer) 和…...
【RunnerGo】离线安装成功版本
目录 一、下载 二、解压安装包 三、修改安装配置 3.1 编辑修改安装参数(我没有改,默认安装即可) 3.2 安装目录结构说明 四、执行安装 五、检查服务并使用 六、访问 前言:最近在调研一个新工具,发现RunnerGo&…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
