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 从服务器获取用户信息࿰…...
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应用】 探索 探索如何做视频博主一边坚持主攻方向( 找工作,包括 AI 学习和 kaggle比赛),一边尝试开辟第二战场(比如:视…...
path 路径模块
在开发基于 Node.js 的应用程序时,处理文件路径是一个常见的需求。为了简化这一过程并避免跨平台兼容性问题,Node.js 提供了 path 模块。该模块提供了一系列实用的方法来解析、格式化和操作文件路径。本文将详细介绍 path 模块的功能及其使用方法&#x…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
