当前位置: 首页 > news >正文

dl学习笔记(9):pytorch数据处理的完整流程

1)自动导入常用库的设置方式

在开始之前,这里介绍一下自动导入常用的你需要加载的库的操作方式。

首先在我们的目录下找到ipython文件,如下图:

然后找到里面的startup文件:

然后新建一个文本文档,输入你每次要导入的库的代码,例子如下:

注意这里要符合python的缩进格式。然后改名字为start.py

然后我们重启一下kernel或者随便新建一个python文件来验证是否成功导入

如果结果如上图所示没有导入任何库直接能调用说明已经自动导入成功。

2)手动实现简单数据生成函数

为了后续做实验的方便,我们需要手动实现一个自己的数据生成函数。当我们可以自定义数据生成的规律,我们将数据喂给模型就可以判断模型是否掌握了我们定义的规律,从而判断模型的性能,这也是从炼丹师进步到化学家的必经之路。

下面我们以最简单的回归类数据集来举例:

def TensorGenRe(num_examples=1000,w=[2,1,1],bias=True,delta=0.01,deg=1):'''回归类数据集创建函数1 num_examples:创建数据集的数据量2 w:包括截距的(如果存在)特征系数向量3 bias:是否需要截距4 delta:扰动项取值5 deg 方程的最高次数'''if bias == True:#如果有偏差项,最后一位是b应该从特征张量中舍去num_inputs = len(w)-1 #这里一律用标注正太分布举例features_true = torch.randn(num_examples,num_inputs)#这里由于最后一列是偏差所以去掉,然后转化为列向量,最后由于后面要进行矩阵乘法所以转化为浮点数w_true = torch.tensor(w[:-1]).reshape(-1,1).float()b_true = torch.tensor(w[-1]).float()#这里需要判断是否只有一列,决定了是用矩阵乘法还是简单的powif num_inputs == 1:labels_true=torch.pow(features_true, deg)* w_true + b_trueelse:labels_true = torch.mm(torch.pow(features_true, deg),w_true)+ b_true#这里需要加上一列1,为了方便后续的矩阵乘法,相当于w*x+1*bfeatures = torch.cat((features_true, torch.ones(len(features_true), 1)),1)#最后乘以扰动项的系数deltalabels= labels_true + torch.randn(size = labels_true.shape)* deltaelse:#下面的逻辑和上面一样num_inputs=len(w)features =torch.randn(num_examples,num_inputs)w_true =torch.tensor(w).reshape(-1,1).float()if num_inputs == 1:labels_true =torch.pow(features,deg)*w_trueelse:labels_true =torch.mm(torch.pow(features, deg),w_true)labels = labels_true + torch.randn(size= labels_true.shape)* deltareturn features, labels

关于上面代码的解释写在注释里面,另外需要注意的是上面这个函数不能实现含有交叉项的方程,下面我们可以尝试调用实验一下:

我们可以通过画图来验证结果:

#绘制图像查看结果
plt.subplot(223)
plt.scatter(features[:,0],labels)#第一个特征和标签的关系
plt. subplot(224)
plt.scatter(features[:, 1],labels)#第二个特征和标签的关系

3)手动实现训练集和测试集的切分

def data_split(features,labels,rate=0.7):#rate是训练集占所有数据的比例num_examples = len(features)#这里是创建一个数据集的行索引列表indices = list(range(num_examples))#通过打乱索引,然后再映射到原数据集实现随机random.shuffle(indices)num_train = int(num_examples*rate)#由于这里已经打乱过了所以直接选前num_train个就行indices_train = torch.tensor(indices[:num_train])indices_test = torch.tensor(indices[num_train:])x_train = features[indices_train]y_train = labels[indices_train]x_test = features[indices_test]y_test = labels[indices_test]return x_train,y_train,x_test,y_test

我们可以做一个简单的调用来验证一下:

4)再谈Dataset和Dataloader

random_split函数:

我们发现pytorch内置的split函数返回的不是数据的实体张量,而是两个迭代器,这其实和pytorch设计哲学有关。当我们处理海量数据的时候,如果我们直接分别存储训练集和测试集的两部分实体数据会非常占用内存和计算资源。在很多教程中数据集划分过程会推荐使用scikit-learn中的train_test_split函数,该函数就是直接存储数据实体,对于初学者更加友好一点。所以这里pytorch并没有真正的实际存储,而是和上面我们手动实现的一样,是进行映射处理成迭代器,我们可以通过和之前一样的循环操作来遍历打印出来。

下面我们回顾一下之前的流程:

我们之前就说dataset是用来进行打包封装操作的,可以发现下面返回的也是一个dataset的一个子类TensorDataset,同样也是一个生成器。这是一个可以用来在上下文环境中互相传的子类,例如可以接着给dataloader,所以在整个pytorch的流程中都是以类迭代器的方式流动的,而并不是以数据实体进行流动。但是这个函数只能用来封装tensor,并不能用来封装更一般的数据类型。

下面用一个库里面有的乳腺癌数据集的例子来说明如何处理一般情况的数据集:

我们还是一样地可以通过data和target来查看特征和标签

下面我们通过创建一个新的dataset子类,并且重写其中的几个方法来实现一般数据的封装

class LBCDataset(Dataset):def __init__(self, data):self.features = data.dataself.labels = data.targetself.lens = len(data.data)# 输入index数值,方法最终返回index对应的特征和下标def __getitem__ (self,index):return self.features[index,:], self.labels[index]def __len__(self):return self.lens

下面我们用random_split来进行切分:

当我们查看LBC_train会发现它只有dataset和indices两个属性,同样的,是一个映射式的对象,其中dataset属性用于查看原数据集对象,indices属性用于查看切分后数据集的每一条数据的index

我们可以分别调用查看:

下面我们来看dataloader:

我们会发现一个有意思的地方,这里的dataset属性返回的其实是LBC_train,也就是说这里的dataset属性存在一种类似于回溯的还原机制。

最后我们用一张图来总结上面的流程:

相关文章:

dl学习笔记(9):pytorch数据处理的完整流程

1)自动导入常用库的设置方式 在开始之前,这里介绍一下自动导入常用的你需要加载的库的操作方式。 首先在我们的目录下找到ipython文件,如下图: 然后找到里面的startup文件: 然后新建一个文本文档,输入你每…...

wps中的vba开发

推荐先学习vba语言(兰色幻想80集) 保存代码时注意保存为 .xlsm(启用宏的工作簿) 子程序SUN和函数FUNCTION: Sub 第一个程序()MsgBox "这是第一个程序"End Sub 注释Sub 第二个程序()Dim str As Stringstr "这是第二个程序&…...

力扣 LCR 078 合并K个升序链表

思路 解题过程 分治合并 与 LeetCode 21题 合并两个有序链表 相似 只是在此题的基础上增加了链表的数量。 使用递归将链表数组不断分成两半,直到分成的小组都只剩下一个链表元素为止,随后开始合并链表。 复杂度 时间复杂度: O(N * logK) K 为 链表(li…...

【hive】记一次hiveserver内存溢出排查,线程池未正确关闭导致

一、使用 MemoryAnalyzer软件打开hprof文件 很大有30G,win内存24GB,不用担心可以打开,ma软件能够生成索引文件,逐块分析内存,如下图。 大约需要4小时。 overview中开不到具体信息。 二、使用Leak Suspects功能继续…...

React Native 开发 安卓项目构建工具Gradle的配置和使用

gradle基本知识 gradle是React Native和Flutter调试、构建安卓App的打包工具。 gradle可以简单的类比为前端的webpack,webpack将源文件打包成HTML、CSS、JavaScript,而gradle将源文件打包成apk或aar(Android Assemble Bundle)。…...

IntelliJ IDEA新版本的底部version control(或git)里local change窗口显示配置修改详细教程

环境 IntelliJ IDEA 2024.3.2.2 (Ultimate Edition) Runtime version: 21.0.58-b631.30 aarch64 (JCEF 122.1.9) macOS 14.2.1 自己记录下。 步骤 设置 --> Version Control(版本控制) --> Commit(提交) --> 去掉勾选:Use non-modal commit interface…...

MySQL三大日志——binlog、redoLog、undoLog详解

日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息,能帮助我们进行很多容错及分析工作,其中有三大日志与我们这些开发者息息相关,本文将介绍binlog、redoLog、undoLog三种日志: 1. redoLog 1.1 为什么…...

MCU应用踩坑笔记(ADC 中断 / 查询法)

问题描述 IC:SC92F7596,在使用过程中,发现一个问题,就是我们使用到了ADC功能,程序的代码如下: ADC采样周期200ms ,采样个数:4 在使用过程中,因配置了ADC中断使能,在中断…...

32.日常算法

1.最大子数组和 题目来源 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,…...

通过docker安装部署deepseek以及python实现

前提条件 Docker 安装:确保你的系统已经安装并正确配置了 Docker。可以通过运行 docker --version 来验证 Docker 是否安装成功。 网络环境:保证设备有稳定的网络连接,以便拉取 Docker 镜像和模型文件。 步骤一:拉取 Ollama Docker 镜像 Ollama 可以帮助我们更方便地管理…...

批量提取word表格数据到一个excel

新建一个excel到word同级目录altf11打开vba窗口并新建模块粘贴下方代码(修改一些必要参数)回到excel表格界面,altf8选择执行该宏注意要在信任中心开启运行vba宏 Sub 批量提取word表格数据到excel()Dim wdApp As Object, wdDoc As ObjectDim …...

使用 Axios 获取用户数据并渲染——个人信息设置

目录 1. HTML 部分(前端页面结构) HTML 结构解析: 2. JavaScript 部分(信息渲染逻辑) JavaScript 解析: 3. 完整流程 4. 总结 5. 适用场景 本文将介绍如何通过 Axios 从服务器获取用户信息&#xff0…...

DeepSeek在FPGA/IC开发中的创新应用与未来潜力

随着人工智能技术的飞速发展,以DeepSeek为代表的大语言模型(LLM)正在逐步渗透到传统硬件开发领域。在FPGA(现场可编程门阵列)和IC(集成电路)开发这一技术密集型行业中,DeepSeek凭借其…...

【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

【DeepSeek-R1训练笔记】随手记录一些训练log

背景说明 DeepSeek系列解读请移步我的上一篇blog:【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra)代码仓库【科大的大四老哥太太太太太值得倾佩了】:https://github.com/Unakar/Logic-RLDeepSeek-R1-Zero复现文档&#…...

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具04

SQLSERVER的ImpDp和ExpDp工具演示 1、指定某些表作为导出对象外 (-exclude_table) 验证用:导出的表,导入到新的数据库 2、指定某些表作为导出对象外 (-exclude_table) 支持模糊检索,可以使用星号 以s开头的表作为导出对象外,…...

「全网最细 + 实战源码案例」设计模式——策略模式

核心思想 策略模式(Strategy Pattern)是一种行为型设计模式,用于定义一系列算法或策略,将它们封装成独立的类,并使它们可以相互替换,而不影响客户端的代码,提高代码的可维护性和扩展性。 结构 …...

[MoeCTF 2022]baby_file

题目 <html> <title>Heres a secret. Can you find it?</title> <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } ?> </html> 读取flag /?filephp://filter/readconvert.base64-encode…...

【AI日记】25.02.07 探索开辟第二战场

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 探索 探索如何做视频博主一边坚持主攻方向&#xff08; 找工作&#xff0c;包括 AI 学习和 kaggle比赛&#xff09;&#xff0c;一边尝试开辟第二战场&#xff08;比如&#xff1a;视…...

path 路径模块

在开发基于 Node.js 的应用程序时&#xff0c;处理文件路径是一个常见的需求。为了简化这一过程并避免跨平台兼容性问题&#xff0c;Node.js 提供了 path 模块。该模块提供了一系列实用的方法来解析、格式化和操作文件路径。本文将详细介绍 path 模块的功能及其使用方法&#x…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...