自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 day39_2025-08-13

测试函数和绘图函数均被封装在了train函数中,但是test和绘图函数在定义train函数之后,这是因为在 Python 中,函数定义的顺序不影响调用,只要在调用前已经完成定义即可。作业:仔细学习下测试和训练代码的逻辑,这是基础,这个代码框架后续会一直沿用,后续的重点慢慢就是转向模型定义阶段了。动态维度指定:使用-1让PyTorch自动计算该维度的大小,但需确保其他维度的指定合理,避免形状不匹配错误。结果:展平为两个维度,保留batch_size,第二个维度自动计算为3×28×28=2352。

2025-08-13 19:06:04 586

原创 day38_2025-08-12

昨天我们介绍了minist这个经典的手写数据集,作为图像数据,相较于结构化数据(表格数据)他的特点在于他每个样本的的形状并不是(特征数,),而是(宽,高,通道数)从这里开始我们进入到了图像数据相关的部分,也是默认你有之前复试班计算机视觉相关的知识,但是一些基础的概念我仍然会提。考虑课程内容的推进,今日的内容只提定义,不涉及训练和测试过程。二、 图像相关的神经网络的定义。2.1 黑白图像模型的定义。2.2 彩色图像模型的定义。一、 图像数据的介绍。

2025-08-12 20:38:42 222

原创 day37_2025-08-11

这里很难理解,为什么train_dataset[sample_idx]可以获取到图片和标签,是因为 datasets.MNIST这个类继承了torch.utils.data.Dataset类,这个类中有一个方法__getitem__,这个方法会返回一个tuple,tuple中第一个元素是图片,第二个元素是标签。在 Python 中,getitem__和__len 是类的特殊方法(也叫魔术方法 ),它们不是像普通函数那样直接使用,而是需要在自定义类中进行定义,来赋予类特定的行为。

2025-08-11 15:49:16 410

原创 day 36_2025-08-09

实际上,在早停策略中,保存 checkpoint(检查点) 是更优选择,因为它不仅保存了模型参数,还记录了训练状态(如优化器参数、轮次、损失值等),一但出现了过拟合,方便后续继续训练。同时每隔固定的训练轮次都会保存模型参数,下次可以接着这里训练,缩小训练的范围。深度学习中模型的保存与加载主要涉及参数(权重)和整个模型结构的存储,同时需兼顾训练状态(如优化器参数、轮次等)以支持断点续训。原理:保存模型参数、优化器状态(学习率、动量)、训练轮次、损失值等完整训练状态,用于中断后继续训练。

2025-08-09 13:28:22 435

原创 day 35_2025-08-09

例如,如果发现权重标准差过大导致训练不稳定,可以尝试调整学习率,使权重更新更平稳;对比 fc1.weight 和 fc2.weight 的统计信息 ,可以发现它们的均值、标准差、最值等存在差异。这反映了不同层在模型中的作用不同。测试这个词在大模型领域叫做推理(inference),意味着把数据输入到训练好的模型的过程。模型的评估模式简单来说就是评估阶段会关闭一些训练相关的操作和策略 ,比如更新参数 正则化等操作,确保模型输出结果的稳定性和一致性。为了了解参数总量,我们需要知道层设计,以及每一层参数的数量。

2025-08-09 13:23:12 376

原创 day 34_2025-08-07

self.fc1是一个实例化的对象,为什么具备了函数一样的用法,这是因为nn.Linear继承了nn.Module类,nn.Module类中定义了__call__方法。可以注意到,self.fc1 = nn.Linear(4, 10) 此时,是实例化了一个nn.Linear(4, 10)对象,并把这个对象赋值给了MLP的初始化函数中的self.fc1变量。综上,数据传输和各种固定开销的总和,超过了 GPU 在这点计算量上通过并行处理所能节省的时间,导致了 GPU 比 CPU 慢的现象。

2025-08-07 21:16:35 952

原创 day33_2025-08-06

未来在复现具体项目时候,新环境命名最好是python版本_pytorch版本_cuda版本,例如 py3.10_pytorch2.0_cuda12.2 ,因为复杂项目对运行环境有要求,所以需要安装对应版本的包。未来在复现具体项目时候,新环境命名最好是python版本_pytorch版本_cuda版本,例如 py3.10_pytorch2.0_cuda12.2 ,因为复杂项目对运行环境有要求,所以需要安装对应版本的包。这里的cuda版本是实际安装的cuda驱动的版本,需要小于显卡所支持的最高版本。

2025-08-06 21:47:57 277

原创 day32_2025-08-05

作业:参考pdpbox官方文档中的其他类,绘制相应的图,任选即可。官方文档的阅读和使用:要求安装的包和文档为同一个版本。官方文档的检索方式:github和官网。绘图的理解:对底层库的调用。普通方法所需要的参数。

2025-08-05 21:40:02 97

原创 day31_2025-08-04

虽然 Python 仍是动态类型语言,但类型注解可以提高代码可读性、可维护性,并支持静态类型检查工具(如 mypy)。另一个是pylance,用于代码提示和类型检查,这个插件会根据你的代码中的类型注解,给出相应的提示和检查,比如你定义了一个函数,参数类型是int,那么当你传入一个字符串时,它会提示你传入的参数类型不正确。函数类型注解为函数参数和返回值指定类型,语法为 def 函数名(参数: 类型) -> 返回类型。类属性与方法的类型注解:为类的属性和方法添加类型信息。变量类型注解语法为 变量名: 类型。

2025-08-04 20:48:04 150

原创 day30_2025-08-03

from math import *:这种方法将 math 模块中的所有公开的函数和变量导入到当前的命名空间中,可以直接使用这些函数和变量而无需 math. 前缀。学习python本身就是个伪命题,就像你说学习科目一样,你没说清晰你学习的具体科目是什么,也没说学这个科目的哪些章节,毕竟每个科目都很大-----要有以终为始的思想。虽然 import math和 from math import *看起来都是导入了 math 模块,但它们在导入方式、作用域处理以及对命名空间的影响上有重要的区别。

2025-08-03 15:14:02 863

原创 day29_2025-08-01

回顾一下,函数的装饰器是 :接收一个函数,返回一个修改后的函数。我们之前是用复用的思想来看装饰器的,换一个角度理解,当你想修改一个函数的时候,可以通过装饰器方法来修改而无需重新定义这个函数。到此为止,训练营已经完成接近一半的任务,如果你扎实的跟完前28天的作业,你的能力已经是相当优秀。通过类装饰器,可以在不修改类内部代码的情况下,为多个类统一添加功能(如日志、统计)既然函数可以复用,有了类和装饰器,那么类还能进一步封装么?可以的,类也有装饰器。类也有修饰器,他的逻辑类似:接收一个类,返回一个修改后的类。

2025-08-01 22:59:36 265

原创 day28_2025-07-31

比如self.name,就代表着:“自己的名字”,self等于“自己”,这个self指向类的实例化地址,传入的self.xx是它的属性。所以,当你需要一个语法上存在的代码块,但又暂时不想在其中放入任何实际的逻辑时,pass 就是一个完美的占位符,它告诉解释器:“这里有一个代码块,但它什么也不做。普通方法和init方法的差别在于,init方法是类的构造方法,当创建对象时,会自动调用init方法----只要你创建这个类对象了,这个init函数就会执行。普通方法是只有你调用类的这个方法的时候,函数才会执行。

2025-07-31 23:51:37 500

原创 DAY 27_2025-07-30

本质是如果让一个函数具备太多功能,那么他看起来就会比较乱,可读性比较差,如果把其中一部分相同甚至可以复用的功能用一个新的函数来调用,然后让2个函数同时实现,就会做到。装饰器函数返回的是wrapper函数,所以,在调用装饰器函数的时候,返回的还是wrapper函数,而不是被修饰的函数。他是被修饰函数的外层函数,参数要大于等于被修饰函数的参数。可以看到,上述这个写法的时候,prime_nums()没有传入参数,如果函数有参数,那么必须给外部函数传入参数,也就是需要给外部的装饰器函数传入参数。

2025-07-30 22:57:57 448

原创 day26_2025-07-29

如果在填充完所有能通过名字匹配上的明确定义的形参后,调用时还有剩余的关键字参数(即这些关键字参数的名字在函数定义中没有对应的明确形参名),那么这些“多余的”关键字参数就会被收集起来,形成一个字典 (dictionary),并赋值给 **kwargs 指定的那个变量(通常就是 kwargs)。当函数被调用时,Python 会先尝试用调用时提供的位置参数去填充函数定义中所有明确定义的、非关键字的形参 (也就是那些普通的,没有 * 或 ** 前缀的参数,包括有默认值的和没有默认值的)。

2025-07-29 22:23:13 878

原创 day25_2025-07-28

相信大家在借助ai写代码的时候,经常会遇到try-except的异常处理模块,这是因为大部分大模型在后训练阶段都是经过强化学习训练的,为了确保结果的正确运行,只有采取 try-except的异常处理模块才能提高模型运行成功的概率。finally 子句 finally 子句中的代码无论 try 块中是否发生异常,也无论 except 块是否被执行,甚至无论 try 或 except 块中是否有 return 语句,它总会被执行。else: (可选)如果try块中的代码没有发生任何异常,则执行此代码块。

2025-07-28 21:09:26 396

原创 day 24_2025-07-27

os.walk 会首先访问起始目录 (my_project),然后它会选择第一个子目录 (data) 并深入进去,访问 data 目录本身,然后继续深入它的子目录 (processed -> raw)。只有当 data 分支下的所有内容都被访问完毕后,它才会回到 my_project 这一层,去访问下一个子目录 (src),并对 src 分支重复深度优先的探索。虽然深度学习的核心在于模型构建和训练,但数据和模型的有效管理是项目成功的关键环节,而 os 模块为此提供了重要的工具。这种策略被称之为深度优先。

2025-07-27 23:01:40 743

原创 day 23_2025-07-26

所以说管道工程最大的优势,是把操作和参数分割开来,只要熟悉整个流程,不需要阅读完整的代码去找对应操作的部分了,只需要在参数列表中设置好参数,就可以完成整个流程。在管道机制中,可以使用Pipeline类来组织和连接不同的转换器和估计器。之所以提到管道,是因为后续你在阅读一些经典的代码的时候,尤其是官方文档,非常喜欢用管道来构建代码,甚至深度学习中也有类似的代码,初学者往往看起来很吃力。在机器学习中,通常会按照一定的顺序对数据进行预处理、特征提取、模型训练和模型评估等步骤,以实现机器学习模型的训练和评估。

2025-07-26 16:23:18 682

原创 day 22_2025-07-25

【代码】day 22_2025-07-25。

2025-07-25 16:28:29 135

原创 day21_2025-07-23

定义:这类算法在降维过程中会利用数据样本的标签信息(通常是类别标签 y)。它们的目标是找到一个低维子空间,在这个子空间中,不同类别的数据点能够被更好地分离开,或者说,这个低维表示更有利于后续的分类(或回归)任务。定义:这类算法在降维过程中不使用任何关于数据样本的标签信息(比如类别标签、目标值等)。通常情况下,我们提到特征降维,很多时候默认指的是无监督降维,这种方法只需要特征数据本身。“还需要有分类标签么”:是的,对于有监督降维,分类标签(或其他形式的监督信号)是必需的。找到统计上独立的成分(如 ICA)。

2025-07-23 23:43:41 262

原创 day 20_2025-07-22

在考研数学中,特征值分解(Eigenvalue Decomposition)相关的内容通常出现在线性代数部分,常见题目类型包括求矩阵的特征值和特征向量、判断矩阵是否可对角化、以及利用特征值分解进行矩阵的对角化。这些题目往往以计算题或证明题的形式出现。相信大家在考研期间都考过线性代数,今天我们来回顾一下经典的考研题目,你就会知道之前的线性代数就是在为这里埋下伏笔。首先需要介绍一个经典的工具 SVD 奇异值分解,他是很多降维算法的基础。代码示例:训练集和测试机svd降维。

2025-07-22 23:03:01 167

原创 day19_2025-07-21

它的核心逻辑是:计算每个特征与目标变量之间的相关系数(范围在-1到1之间,值越大表示正相关越强,值越小表示负相关越强,接近0表示几乎无关),然后根据相关系数的绝对值大小,选择与目标变量相关性较高的特征,剔除相关性较低的特征。特征筛选:从n个特征中筛选出m个特征,比如方差筛选,剔除方差过小的特征;所以在面对高维特征的时候常常需要引入特征降维,我们之前课程中的项目的特征也就小几十个,不太需要做降维,对于某些特征较多的数据,如基因数据、微生物数据、传感器数据等,特征较多,所以会考虑特征降维。

2025-07-21 14:33:05 365

原创 day 18_2025-07-20

你最开始聚类的时候,就选择了你想最后用来确定簇含义的特征,那么你需要选择一些特征来进行聚类,那么你最后确定簇含义的特征就是这几个特征,而非全部。如你想聚类消费者购买习惯,那么他过去的消费记录、购买记录、购买金额等等,这些特征都与消费者购买习惯有关,你可以使用这些特征来确定簇含义,一些其他的特征,如消费者年龄,工作行业则不考虑。现在需要给这个簇赋予实际的含义,一般当你赋予实际含义的时候,你需要根据某几个特征来赋予,但是源数据特征很多,如何选择特征呢?推断簇含义的2个思路:先选特征和后选特征。

2025-07-20 22:49:23 117

原创 DAY 17_2025-07-19

无监督聚类算法,类似与特征工程,引入新的特征(类别),也可以引入到分类边界的距离等作为新的特征。常见聚类算法:kmeans聚类、dbscan聚类、层次聚类,具体的算法思想不在此详细叙述。聚类前需要标准化数据,聚类后可以进行可视化(t-sne或者pca)聚类效果评估指标:轮廓系数、CH指数以及DB指数。

2025-07-19 19:24:46 170

原创 day16_2025-07-18

在后续进行频繁的数学运算时,尤其是在深度学习领域,对 NumPy 数组的理解非常有帮助,因为 PyTorch 或 TensorFlow 中的 Tensor 张量本质上可以视为支持 GPU 加速和自动微分的 NumPy 数组。shap_values[:, :, 0] 的每一行代表的是 一个特定样本每个特征对于预测类别的贡献值(SHAP 值)。值得注意的是,二维数组不一定是正方形(即行数等于列数),它可以是任意的 n * m 形状,其中 n 是行数,m 是列数。

2025-07-18 17:14:13 875

原创 day15_2025-07-17

超参数优化算法:网格搜索、贝叶斯以及启发式算法模拟退火、遗传算法等。本周主要的内容是一些常见的机器学习流程以及其中的部分内容。标签编码以及连续特征的处理:归一化和正态化等。图像的绘制:热力图、Shap图等的绘制。不平衡数据集的处理:过采样以及欠采样。

2025-07-17 21:35:14 300

原创 day14_2025-07-16

比如说甲乙丙丁四个工人一起打工,甲和乙完成了价值100元的工件,甲、乙、丙完成了价值120元的工件,乙、丙、丁完成了价值150元的工件,甲、丁完成了价值90元的工件,那么该如何公平、合理地分配这四个人的工钱呢?分类问题:shap_values.shape =(n_samples, n_features, n_classes)分类问题:shap_values.shape =(n_samples, n_features, n_classes)分类问题和回归问题输出的shap_values的形状不同。

2025-07-16 21:41:50 647

原创 day 13_2025-07-15

在处理类别不平衡的数据集时,标准机器学习算法(如默认的随机森林)可能会过度偏向多数类,导致对少数类的预测性能很差。随机过采样的缺点是,它可能会增加训练集的大小,从而增加训练时间。类别权重:这种方法在模型训练阶段介入,通过调整不同类别样本对损失函数的贡献来影响模型的学习过程。过采样是把少的类别补充和多的类别一样多,欠采样是把多的类别减少和少的类别一样。随机过采样的优点是,它可以增加少数类的样本数,从而提高模型的泛化能力。对于少数类中的每个样本,计算它与少数类中其他样本的距离,得到其。

2025-07-15 13:08:11 318

原创 day12_2025-07-14

三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法。

2025-07-14 21:23:05 280

原创 day 11_2025-07-13

划分训练集、验证集和测试集:train_test_split()函数只能划分一次数据集,如果想要划分训练集、验证集和测试集,需要使用两次该函数。贝叶斯优化的流程:定义搜索的空间–> 创建贝叶斯优化搜索对象–> 在训练集上训练–> 选择最佳参数模型–> 在测试集上预测。如果做交叉验证,就需要划分验证集和测试集,但是很多调参方法中都默认有交叉验证,所以实际中可以省去划分验证集和测试集的步骤。网格搜索的流程:定义参数网格–> 创建网格搜索对象–> 在训练集上训练–> 选择最佳参数模型–> 在测试集上预测。

2025-07-13 18:09:23 234

原创 day10机器学习建模与评估_2025-07-13

【代码】day10机器学习建模与评估_2025-07-13。

2025-07-13 00:15:03 81

原创 day09_2025-07-11 (1)

【代码】day09_2025-07-11 (1)

2025-07-11 16:13:51 364

原创 DAY08_2025-07-09

【代码】DAY08_2025-07-09。

2025-07-09 19:25:19 131

原创 day07_2025-07-08 (1)

【代码】day07_2025-07-08 (1)

2025-07-08 20:22:40 111

原创 day06_2025-07-07

1.单特征可视化:连续变量箱线图(还说了核密度直方图)、离散特征直方图。内容回顾:数据初步可视化。2.特征和标签关系可视化。3.箱线图美化—>直方图。

2025-07-07 10:17:58 126

原创 day 05_2025-07-06

采取循环对所有离散特征进行独热编码。加上昨天的内容 并且处理所有缺失值。选择一个离散特征进行独热编码。今天的任务分成以下几步。

2025-07-06 14:42:43 163

原创 day04_2025-07-05

按照示例代码的要求,去尝试补全信贷数据集中的数值型缺失值。1.打开数据(csv文件、excel文件)题目:初识pandas库与缺失数据的补全。2.查看数据(尺寸信息、查看列名等方法)5.利用循环补全所有列的空值。4.众数、中位数填补空值。

2025-07-05 15:22:13 157

原创 day3_2025-07-04

1.创建一个包含三个字符串元素的列表 tech_list,元素分别为 “Python”, “Java”, “Go”。4.修改 tech_list 中的第二个元素(索引为 1),将其从 “Java” 更改为 “Ruby”。1.定义一个包含整数的列表 scores,赋值为 [85, 92, 78, 65, 95, 88]。6.计算当前 tech_list 的长度,并将结果存储在变量 current_length 中。2.获取列表中的第一个元素,并将其存储在变量 first_tech 中。

2025-07-04 16:59:32 235

原创 day2_2025-07-03

题目: 定义两个整数变量,score_a 赋值为 75,score_b 赋值为 90。比较 score_a 是否大于 score_b,将比较结果(布尔值)存储在变量 is_a_higher 中;比较 score_a 是否小于等于 score_b,将结果存储在变量 is_a_lower_or_equal 中;比较 score_a 是否不等于 score_b,将结果存储在变量 is_different 中。题目: 定义两个字符串变量,str1 赋值为 “Hello”,str2 赋值为 “Python”。

2025-07-03 17:09:27 210

原创 Silence DAY1

● 题目: 定义两个浮点数变量,price 赋值为 19.9,discount 赋值为 0.8 (表示 8 折)。计算这两个变量的和,并将结果存储在一个新的变量 a 中;然后,使用 f-string 打印出类似 “20 加 8 的结果是:28” 的信息,分成三行打印。●题目: 创建两个变量:name 存储你的名字(字符串,例如 “小明”),city 存储你所在的城市(字符串,例如 “北京”)。●如果想在输出的姓名两边加上引号,例如 姓名: “小明”, 城市: 北京,f-string 语句应该怎么写?

2025-07-02 20:50:53 281

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除