- 博客(54)
- 收藏
- 关注
原创 day55_2025-08-28
昨天说了数据的检验,需要做自相关性检验、平稳性检验、季节性检验。我们用了三种核心的诊断工具:自相关性检验 (ACF/PACF图):检查数据点之间是否存在内在的、延迟的关联。平稳性检验 (ADF检验):判断数据的统计特性(如均值、方差)是否随时间改变。季节性检验 (肉眼观察或季节性分解):识别数据中是否存在固定的周期性波动。那么如果数据存在某些特性需要如何处理呢?我们的核心目标是让数据变得平稳。为什么平稳性如此重要?
2025-08-28 22:57:45
561
原创 day 54_2025-08-27
在时序预测中,这种要求会更加苛刻,你设想一下,你可以制造一个随机的序列,然后让模型来学习,这注定也是不可能实现的。例如,一个不考虑季节性的模型在预测12月份的零售额时,可能会基于11月份的数据给出一个平稳的预测,完全错过圣诞节带来的销售高峰。因此,检验序列的平稳性,是时序分析中至关重要的一步。之前的结构化预测(样本独立无关)的机器学习模型,他在预测的时候,如果数据本身就没价值,比如特征和样本毫无关系,你生成一些随机数作为特征,再随机一些数成标签,一样可以训练,但是模型注定也学不到什么东西。
2025-08-27 22:46:09
600
原创 day53_2025-08-26
在进入rnn相关变体的内容前,我们必须要搞懂序列任务的前生今世,这是我当初自学的时候非常迷茫和痛苦的,只有理解了序列任务,才知道模型为什么这么选择,数据为什么这么处理一、序列预测任务介绍1.1 序列预测是什么?我们之前接触到的结构化数据,它本身不具备顺序,我们认为每个样本之间独立无关,样本之间即使调换顺序,仍然不影响模型的训练。但是日常中很多数据是存在先后关系的,而他们对应的任务是预测下一步的值,我们把这个任务称之为序列预测。举个例子,比如有过去30天的股票价格,我们希望预测第31天的价格。
2025-08-26 22:57:48
396
原创 day52_2025-08-25
它的核心设计理念是 “并行的多尺度融合”,通过在同一层网络中使用多个不同大小的卷积核(如 1x1、3x3、5x5)以及池化操作,从不同尺度提取图像特征,然后将这些特征进行融合,从而在不增加过多计算量的情况下,获得更丰富的特征表达。所以不同的设计,其实是为了不同的任务,比如你虽然可以捕捉不同尺度的信息,但是对于图像分类这个任务来说没用,我的核心是整个图像的类别,如果你是目标检测,对于小目标的检测中小尺度的设计就很有用。卷积也是有很多变体的,除了我们之前说过的基础的卷积,还有空洞卷积、幻影卷积等等变体。
2025-08-25 16:11:32
642
原创 day51_2025-08-24
然后我随机初始化这个造假币的a,我每次给他随机的输入,他会生成不同的假币,每一张假币都会让警察来判断,警察能够分别出真假,如果说你是假的,那么造假币的就要更新参数,如果是真的,那么造假币的参数就不用更新,警察要更新参数。为了让警察能分辨真币,我需要给他看真币的样子,也就是先训练警察知道什么是真币,但是只给他一个真币他也没法训练,我中间得掺杂一些无意义的噪声图片,无意义的肯定不可能是真币,所以他大概可以训练好。判别器的损失定义在先,生成器的损失定义基于判别器的反馈。
2025-08-24 17:40:09
916
原创 day50_2025-08-23
大部分时候,由于光是固定超参数的情况下,训练完模型就已经很耗时了,所以正常而言,基本不会采用传统机器学习的那些超参数方法,网格、贝叶斯、optuna之类的,看到一些博主用这些写文案啥的,感觉这些人都是脑子有问题的,估计也没学过机器学习直接就学深度学习了,搞混了二者的关系。预训练参数是最好的参数初始化方法,在训练前先找找类似的论文有无预训练参数,其次是Xavir,尤其是小数据集的场景,多找论文找到预训练模型是最好的做法。关于预训练参数,我们介绍过了,优先动深层的参数,因为浅层是通用的;
2025-08-23 11:19:41
570
原创 day49_2025-08-22
在更理想的情况下,如果能让 attention 图的值都趋近于 sigmoid 函数的反函数中对应输出为1的值,那么CBAM就近似于一个“直通车”(x * 1 = x),网络可以选择“忽略”它。给专家(预训练层) 设置一个极低的学习率(比如1e-5),告诉他们:“你们基本保持现状,只需要根据实习生的表现做一些微小的调整即可。但是你要注意,最后的卷积形式是 卷积–激活–池化–全连接,如果你放置前全连接前的话,cbam中的空间注意力会完全失效,因为此时空间维度不存在了,失去了寻找空间相关性的能力。
2025-08-22 10:52:55
802
原创 DAY48_2025-08-22
CBAM 的突破: 通道注意力(Channel Attention):分析 “哪些通道的特征更关键”(如图像中的颜色、纹理通道)。它的核心目标是通过学习的方式,自动获取特征图在通道和空间维度上的重要性,进而对特征图进行自适应调整,增强重要特征,抑制不重要特征,提升模型的特征表达能力和性能。CBAM 由两个主要部分组成:通道注意力模块(Channel Attention Module)和空间注意力模块(Spatial Attention Module)。这两个模块顺序连接,共同作用于输入的特征图。
2025-08-22 00:07:16
286
原创 day47_2025-08-20
在 PyTorch 中,torch.randn()是一个常用的随机张量生成函数,它可以创建一个由标准正态分布(均值为 0,标准差为 1)随机数填充的张量。PyTorch 的广播机制(Broadcasting)是一种强大的张量运算特性,允许在不同形状的张量之间进行算术运算,而无需显式地扩展张量维度或复制数据。在深度学习中经常需要随机生成一些张量,比如权重的初始化,或者计算输入纬度经过模块后输出的维度,都可以用一个随机函数来实现需要的张量格式,而无需像之前一样必须加载一张真实的图片。
2025-08-20 22:23:30
921
原创 day 45_2025-08-19
我们现在说的很多模块,比如通道注意力、空间注意力、通道注意力等等,都是基于自注意力机制的。特征图本质就是不同的卷积核的输出,浅层指的是离输入图近的卷积层,浅层卷积层的特征图通常较大,而深层特征图会经过多次下采样,尺寸显著缩小,尺寸差异过大时,小尺寸特征图在视觉上会显得模糊或丢失细节。在同一个数据集上,对同一个模型进行模块的增加和减少,这种实验我们称之为消融实验。可以看到测试集一定程度上收敛了,在85%左右(还可以继续训练的),我们后续和加了通道注意力的该模型作对比,这也意味着我们进入到了消融实验的部分了。
2025-08-19 17:02:54
518
原创 day44_2025-08-18
你可以用它直观看到训练过程中的数据变化(比如损失值、准确率)、模型结构、数据分布等,不用盯着一堆枯燥的数字看,对新手非常友好。TensorBoard 的核心原理就是在训练过程中,把训练过程中的数据(比如损失、准确率、图片等)先记录到日志文件里,再通过工具把这些日志文件可视化成图表,这样就不用自己手动打印数据或者用其他工具画图。之前的内容中,我们在神经网络训练中,为了帮助自己理解,借用了很多的组件,比如训练进度条、可视化的loss下降曲线、权重分布图,运行结束后还可以查看单张图的推理效果。
2025-08-18 23:35:10
1009
原创 day43_2025-08-17
所以预训练模型一般就挺强的。这里给大家介绍一个常常用来做预训练的数据集,ImageNet,ImageNet 1000 个类别,有 1.2 亿张图像,尺寸 224x224,数据集大小 1.4G,下载地址:http://www.image-net.org/。所以很自然的想到,如果最开始能有比较好的参数,即可能导致未来训练次数少,也可能导致未来训练避免陷入局部最优解的问题。如果别人在某些和我们目标数据类似的大规模数据集上做过训练,我们可以用他的训练参数来初始化我们的模型,这样我们的模型就比较容易收敛。
2025-08-17 22:53:23
353
原创 day42_2025-08-16
作业:kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化。对于图片数量较少的类别,比如冰川,需要用数据增强平衡数据集。含有6类自然场景:建筑、森林、冰川、山、海洋、街道。注意数据集下载时的结构,需要去掉一层文件。已经分好了train和test。进阶:并拆分成多个文件。
2025-08-16 23:53:15
207
原创 day 41_2025-08-15
这种形式很简约,只需要一行就可以定义一个函数,lambda 的核心价值在于用极简语法快速定义临时函数,避免为一次性使用的简单逻辑单独命名函数,从而减少代码冗余,提升开发效率。Hook 函数是一种回调函数,它可以在不干扰模型正常计算流程的情况下,插入到模型的特定位置,以便获取或修改中间层的输出或梯度。回调函数核心是将处理逻辑(回调)作为参数传递给计算函数,控制流:计算函数 → 回调函数,适合一次性或动态的处理需求(控制流指的是程序执行时各代码块的执行顺序)这个函数可以访问模块的输入和输出,但不能修改它们。
2025-08-15 23:39:20
968
原创 day 40_2025-08-14
就好比你在学新知识,知识体系的基础一直在变,你就得不断重新适应,模型训练也是如此,这就导致训练变得困难,这就是内部协变量偏移问题。该策略通常不改变单次训练的样本总数,而是通过对现有图像进行多样化变换,使每次训练输入的样本呈现更丰富的形态差异,从而有效扩展模型训练的样本空间多样性。Batch Normalization:一般用于图像数据,因为图像数据通常是批量处理,有相对固定的 Batch Size ,能利用 Batch 内数据计算稳定的统计量(均值、方差 )来做归一化。-----深度学习可解释性。
2025-08-14 21:38:01
975
原创 day39_2025-08-13
测试函数和绘图函数均被封装在了train函数中,但是test和绘图函数在定义train函数之后,这是因为在 Python 中,函数定义的顺序不影响调用,只要在调用前已经完成定义即可。作业:仔细学习下测试和训练代码的逻辑,这是基础,这个代码框架后续会一直沿用,后续的重点慢慢就是转向模型定义阶段了。动态维度指定:使用-1让PyTorch自动计算该维度的大小,但需确保其他维度的指定合理,避免形状不匹配错误。结果:展平为两个维度,保留batch_size,第二个维度自动计算为3×28×28=2352。
2025-08-13 19:06:04
820
原创 day38_2025-08-12
昨天我们介绍了minist这个经典的手写数据集,作为图像数据,相较于结构化数据(表格数据)他的特点在于他每个样本的的形状并不是(特征数,),而是(宽,高,通道数)从这里开始我们进入到了图像数据相关的部分,也是默认你有之前复试班计算机视觉相关的知识,但是一些基础的概念我仍然会提。考虑课程内容的推进,今日的内容只提定义,不涉及训练和测试过程。二、 图像相关的神经网络的定义。2.1 黑白图像模型的定义。2.2 彩色图像模型的定义。一、 图像数据的介绍。
2025-08-12 20:38:42
264
原创 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
429
原创 day 36_2025-08-09
实际上,在早停策略中,保存 checkpoint(检查点) 是更优选择,因为它不仅保存了模型参数,还记录了训练状态(如优化器参数、轮次、损失值等),一但出现了过拟合,方便后续继续训练。同时每隔固定的训练轮次都会保存模型参数,下次可以接着这里训练,缩小训练的范围。深度学习中模型的保存与加载主要涉及参数(权重)和整个模型结构的存储,同时需兼顾训练状态(如优化器参数、轮次等)以支持断点续训。原理:保存模型参数、优化器状态(学习率、动量)、训练轮次、损失值等完整训练状态,用于中断后继续训练。
2025-08-09 13:28:22
457
原创 day 35_2025-08-09
例如,如果发现权重标准差过大导致训练不稳定,可以尝试调整学习率,使权重更新更平稳;对比 fc1.weight 和 fc2.weight 的统计信息 ,可以发现它们的均值、标准差、最值等存在差异。这反映了不同层在模型中的作用不同。测试这个词在大模型领域叫做推理(inference),意味着把数据输入到训练好的模型的过程。模型的评估模式简单来说就是评估阶段会关闭一些训练相关的操作和策略 ,比如更新参数 正则化等操作,确保模型输出结果的稳定性和一致性。为了了解参数总量,我们需要知道层设计,以及每一层参数的数量。
2025-08-09 13:23:12
391
原创 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
971
原创 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
295
原创 day32_2025-08-05
作业:参考pdpbox官方文档中的其他类,绘制相应的图,任选即可。官方文档的阅读和使用:要求安装的包和文档为同一个版本。官方文档的检索方式:github和官网。绘图的理解:对底层库的调用。普通方法所需要的参数。
2025-08-05 21:40:02
115
原创 day31_2025-08-04
虽然 Python 仍是动态类型语言,但类型注解可以提高代码可读性、可维护性,并支持静态类型检查工具(如 mypy)。另一个是pylance,用于代码提示和类型检查,这个插件会根据你的代码中的类型注解,给出相应的提示和检查,比如你定义了一个函数,参数类型是int,那么当你传入一个字符串时,它会提示你传入的参数类型不正确。函数类型注解为函数参数和返回值指定类型,语法为 def 函数名(参数: 类型) -> 返回类型。类属性与方法的类型注解:为类的属性和方法添加类型信息。变量类型注解语法为 变量名: 类型。
2025-08-04 20:48:04
158
原创 day30_2025-08-03
from math import *:这种方法将 math 模块中的所有公开的函数和变量导入到当前的命名空间中,可以直接使用这些函数和变量而无需 math. 前缀。学习python本身就是个伪命题,就像你说学习科目一样,你没说清晰你学习的具体科目是什么,也没说学这个科目的哪些章节,毕竟每个科目都很大-----要有以终为始的思想。虽然 import math和 from math import *看起来都是导入了 math 模块,但它们在导入方式、作用域处理以及对命名空间的影响上有重要的区别。
2025-08-03 15:14:02
876
原创 day29_2025-08-01
回顾一下,函数的装饰器是 :接收一个函数,返回一个修改后的函数。我们之前是用复用的思想来看装饰器的,换一个角度理解,当你想修改一个函数的时候,可以通过装饰器方法来修改而无需重新定义这个函数。到此为止,训练营已经完成接近一半的任务,如果你扎实的跟完前28天的作业,你的能力已经是相当优秀。通过类装饰器,可以在不修改类内部代码的情况下,为多个类统一添加功能(如日志、统计)既然函数可以复用,有了类和装饰器,那么类还能进一步封装么?可以的,类也有装饰器。类也有修饰器,他的逻辑类似:接收一个类,返回一个修改后的类。
2025-08-01 22:59:36
279
原创 day28_2025-07-31
比如self.name,就代表着:“自己的名字”,self等于“自己”,这个self指向类的实例化地址,传入的self.xx是它的属性。所以,当你需要一个语法上存在的代码块,但又暂时不想在其中放入任何实际的逻辑时,pass 就是一个完美的占位符,它告诉解释器:“这里有一个代码块,但它什么也不做。普通方法和init方法的差别在于,init方法是类的构造方法,当创建对象时,会自动调用init方法----只要你创建这个类对象了,这个init函数就会执行。普通方法是只有你调用类的这个方法的时候,函数才会执行。
2025-07-31 23:51:37
508
原创 DAY 27_2025-07-30
本质是如果让一个函数具备太多功能,那么他看起来就会比较乱,可读性比较差,如果把其中一部分相同甚至可以复用的功能用一个新的函数来调用,然后让2个函数同时实现,就会做到。装饰器函数返回的是wrapper函数,所以,在调用装饰器函数的时候,返回的还是wrapper函数,而不是被修饰的函数。他是被修饰函数的外层函数,参数要大于等于被修饰函数的参数。可以看到,上述这个写法的时候,prime_nums()没有传入参数,如果函数有参数,那么必须给外部函数传入参数,也就是需要给外部的装饰器函数传入参数。
2025-07-30 22:57:57
461
原创 day26_2025-07-29
如果在填充完所有能通过名字匹配上的明确定义的形参后,调用时还有剩余的关键字参数(即这些关键字参数的名字在函数定义中没有对应的明确形参名),那么这些“多余的”关键字参数就会被收集起来,形成一个字典 (dictionary),并赋值给 **kwargs 指定的那个变量(通常就是 kwargs)。当函数被调用时,Python 会先尝试用调用时提供的位置参数去填充函数定义中所有明确定义的、非关键字的形参 (也就是那些普通的,没有 * 或 ** 前缀的参数,包括有默认值的和没有默认值的)。
2025-07-29 22:23:13
886
原创 day25_2025-07-28
相信大家在借助ai写代码的时候,经常会遇到try-except的异常处理模块,这是因为大部分大模型在后训练阶段都是经过强化学习训练的,为了确保结果的正确运行,只有采取 try-except的异常处理模块才能提高模型运行成功的概率。finally 子句 finally 子句中的代码无论 try 块中是否发生异常,也无论 except 块是否被执行,甚至无论 try 或 except 块中是否有 return 语句,它总会被执行。else: (可选)如果try块中的代码没有发生任何异常,则执行此代码块。
2025-07-28 21:09:26
412
原创 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
759
原创 day 23_2025-07-26
所以说管道工程最大的优势,是把操作和参数分割开来,只要熟悉整个流程,不需要阅读完整的代码去找对应操作的部分了,只需要在参数列表中设置好参数,就可以完成整个流程。在管道机制中,可以使用Pipeline类来组织和连接不同的转换器和估计器。之所以提到管道,是因为后续你在阅读一些经典的代码的时候,尤其是官方文档,非常喜欢用管道来构建代码,甚至深度学习中也有类似的代码,初学者往往看起来很吃力。在机器学习中,通常会按照一定的顺序对数据进行预处理、特征提取、模型训练和模型评估等步骤,以实现机器学习模型的训练和评估。
2025-07-26 16:23:18
701
原创 day21_2025-07-23
定义:这类算法在降维过程中会利用数据样本的标签信息(通常是类别标签 y)。它们的目标是找到一个低维子空间,在这个子空间中,不同类别的数据点能够被更好地分离开,或者说,这个低维表示更有利于后续的分类(或回归)任务。定义:这类算法在降维过程中不使用任何关于数据样本的标签信息(比如类别标签、目标值等)。通常情况下,我们提到特征降维,很多时候默认指的是无监督降维,这种方法只需要特征数据本身。“还需要有分类标签么”:是的,对于有监督降维,分类标签(或其他形式的监督信号)是必需的。找到统计上独立的成分(如 ICA)。
2025-07-23 23:43:41
285
原创 day 20_2025-07-22
在考研数学中,特征值分解(Eigenvalue Decomposition)相关的内容通常出现在线性代数部分,常见题目类型包括求矩阵的特征值和特征向量、判断矩阵是否可对角化、以及利用特征值分解进行矩阵的对角化。这些题目往往以计算题或证明题的形式出现。相信大家在考研期间都考过线性代数,今天我们来回顾一下经典的考研题目,你就会知道之前的线性代数就是在为这里埋下伏笔。首先需要介绍一个经典的工具 SVD 奇异值分解,他是很多降维算法的基础。代码示例:训练集和测试机svd降维。
2025-07-22 23:03:01
177
原创 day19_2025-07-21
它的核心逻辑是:计算每个特征与目标变量之间的相关系数(范围在-1到1之间,值越大表示正相关越强,值越小表示负相关越强,接近0表示几乎无关),然后根据相关系数的绝对值大小,选择与目标变量相关性较高的特征,剔除相关性较低的特征。特征筛选:从n个特征中筛选出m个特征,比如方差筛选,剔除方差过小的特征;所以在面对高维特征的时候常常需要引入特征降维,我们之前课程中的项目的特征也就小几十个,不太需要做降维,对于某些特征较多的数据,如基因数据、微生物数据、传感器数据等,特征较多,所以会考虑特征降维。
2025-07-21 14:33:05
379
原创 day 18_2025-07-20
你最开始聚类的时候,就选择了你想最后用来确定簇含义的特征,那么你需要选择一些特征来进行聚类,那么你最后确定簇含义的特征就是这几个特征,而非全部。如你想聚类消费者购买习惯,那么他过去的消费记录、购买记录、购买金额等等,这些特征都与消费者购买习惯有关,你可以使用这些特征来确定簇含义,一些其他的特征,如消费者年龄,工作行业则不考虑。现在需要给这个簇赋予实际的含义,一般当你赋予实际含义的时候,你需要根据某几个特征来赋予,但是源数据特征很多,如何选择特征呢?推断簇含义的2个思路:先选特征和后选特征。
2025-07-20 22:49:23
133
原创 DAY 17_2025-07-19
无监督聚类算法,类似与特征工程,引入新的特征(类别),也可以引入到分类边界的距离等作为新的特征。常见聚类算法:kmeans聚类、dbscan聚类、层次聚类,具体的算法思想不在此详细叙述。聚类前需要标准化数据,聚类后可以进行可视化(t-sne或者pca)聚类效果评估指标:轮廓系数、CH指数以及DB指数。
2025-07-19 19:24:46
179
原创 day16_2025-07-18
在后续进行频繁的数学运算时,尤其是在深度学习领域,对 NumPy 数组的理解非常有帮助,因为 PyTorch 或 TensorFlow 中的 Tensor 张量本质上可以视为支持 GPU 加速和自动微分的 NumPy 数组。shap_values[:, :, 0] 的每一行代表的是 一个特定样本每个特征对于预测类别的贡献值(SHAP 值)。值得注意的是,二维数组不一定是正方形(即行数等于列数),它可以是任意的 n * m 形状,其中 n 是行数,m 是列数。
2025-07-18 17:14:13
895
原创 day15_2025-07-17
超参数优化算法:网格搜索、贝叶斯以及启发式算法模拟退火、遗传算法等。本周主要的内容是一些常见的机器学习流程以及其中的部分内容。标签编码以及连续特征的处理:归一化和正态化等。图像的绘制:热力图、Shap图等的绘制。不平衡数据集的处理:过采样以及欠采样。
2025-07-17 21:35:14
313
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人