当前位置: 首页 > 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…...

阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库

阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库 最近帮朋友 完成一些运维工作 &#xff0c;这里记录一下。 文章目录 阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库最近帮朋友 完成一些运维工作 &#xff0c;这里记录一下。 阿里云 RDS MySQL 5.7 添加白名单1. 登录…...

Spring中循环依赖问题的解决机制总结

一、解决机制 1. 什么是循环依赖 循环依赖是指两个或多个Bean之间相互依赖对方&#xff0c;形成一个闭环的依赖关系。最常见的情况是当Bean A依赖Bean B&#xff0c;而Bean B又依赖Bean A时&#xff0c;就形成了循环依赖。在Spring容器初始化过程中&#xff0c;如果不加以特殊…...

SDC命令详解:使用set_propagated_clock命令进行约束

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目录 指定端口列表/集合 简单使用 注意事项 传播时钟是在进行了时钟树综合后&#xff0c;使用set_propagated_clock命令可以将一个理想时钟转换为传播时钟&#x…...

力扣刷题(第四十九天)

灵感来源 - 保持更新&#xff0c;努力学习 - python脚本学习 反转链表 解题思路 迭代法&#xff1a;通过遍历链表&#xff0c;逐个改变节点的指针方向。具体步骤如下&#xff1a; 使用三个指针&#xff1a;prev&#xff08;初始为None&#xff09;、curr&#xff08;初始为…...

46、web实验-遍历数据与页面bug修改

46、web实验-遍历数据与页面bug修改 在Web开发中&#xff0c;遍历数据和修改页面bug是常见的任务。以下是关于这两个主题的讲解&#xff1a; ### 一、遍历数据 **目的**&#xff1a;在页面上动态展示数据&#xff0c;例如用户列表、商品信息等。 **常用方法**&#xff1a; ####…...

《前端面试题:CSS的display属性》

CSS display属性完全指南&#xff1a;深入理解布局核心属性 掌握display属性是CSS布局的基石&#xff0c;也是前端面试必考知识点 一、display属性概述&#xff1a;布局的核心控制 display属性是CSS中最重要、最基础的属性之一&#xff0c;它决定了元素在页面上的渲染方式和布…...

Zookeeper 和 Kafka 版本与 JDK 要求

Apache Zookeeper 和 Apache Kafka 在不同版本中对 JDK 的要求如下表所示(基于官方文档和历史版本记录整理): 1. Zookeeper 版本与 JDK 要求 Zookeeper 版本要求的最低 JDK 版本说明3.4.x 系列JDK 6生产环境建议用 JDK 8(旧版兼容性强)。3.5.x 系列(3.5.5+)JDK 83.5.0 …...

【大模型LLM学习】Flash-Attention的学习记录

【大模型LLM学习】Flash-Attention的学习记录 0. 前言1. flash-attention原理简述2. 从softmax到online softmax2.1 safe-softmax2.2 3-pass safe softmax2.3 Online softmax2.4 Flash-attention2.5 Flash-attention tiling 0. 前言 Flash Attention可以节约模型训练和推理时间…...

视频的分片上传,断点上传

​ 上传功能的实现&#xff0c;点击上传按钮&#xff0c;判断添加的文件是否符合要求&#xff0c;如果符合把他放入文件列表中&#xff0c;并把他的状态设置为等待中&#xff0c;对于每个文件&#xff0c;把他们切分为chunksize大小的文件片段&#xff0c;再检查他的状态是否为…...

Python使用clickhouse-local和MySQL表函数实现从MySQL到ClickHouse数据同步

下面是一个使用clickhouse-local和MySQL表函数实现从MySQL到ClickHouse数据同步的Python解决方案&#xff0c;包含全量同步、增量同步和测试用例。 此解决方案提供了生产级数据同步所需的核心功能&#xff0c;可根据具体场景扩展更多高级特性如&#xff1a;数据转换、字段映射…...