- 博客(59)
- 收藏
- 关注
原创 day59 经典时序预测模型3
之前的学习中,介绍了时序模型的发展,从AR到MA到ARMA,再到ARIMA。本质就是把数据处理的操作和模型结合在一起,实际上季节性差分也可以合并到模型中,让流程变得更加统一。季节性差分用S来表示,所以这个模型叫做SARIMA模型。
2025-07-12 17:14:36
837
原创 day58 经典时序预测模型2
昨天我们掌握了AR, MA, 和 ARMA 模型,它们是处理平稳时间序列的利器。但现实世界的数据,比如股票价格、公司销售额,往往带有明显的趋势性或季节性,它们是不平稳的。今天,我们就来学习ARIMA模型,它正是为了解决这个问题而生的。它进一步引入差分来解决不平稳问题差分是使数据平稳化的关键步骤。一阶差分: 就是序列中每个点减去它前一个点的值。这通常可以消除数据中的线性趋势。二阶差分: 对一阶差分后的结果再做一次差分。这可以消除数据中的曲线趋势(比如抛物线趋势)。
2025-07-11 16:57:52
1097
原创 day57 经典时序预测模型1
非平稳性(趋势) -> 使用差分 (.diff())- 季节性 -> 使用季节性差分 (.diff(periods=s))- 自相关性 -> 不消除,而是利用 ACF/PACF图 来为后续的模型选择提供线索。- 截尾 (Cut off):ACF或PACF图在某个延迟之后,相关系数突然变得非常小,几乎都在置信区间内。- 拖尾 (Tail off):相关系数随着延迟增加而缓慢、指数级地衰减,而不是突然截断。- 如果ACF截尾,PACF拖尾 -> 考虑 MA(q) 模型。
2025-07-10 17:55:15
999
原创 day56 时序数据的检验
在时序预测中,这种要求会更加苛刻,设想一下,你可以制造一个随机序列,然后让模型来学习,这注定是不可能实现的。也就是说数据本身要具备可预测性。一个完全随机的序列(学术上称为白噪声)是不可预测的。它的未来值和过去值没有任何关系性。任何模型试图从中学习规律,最终只是徒劳。白噪声需要满足以下条件:1. 均值为02. 方差恒定3. 自相关性为0(即过去的值对未来的值没有影响)下面生成一组随机序列# 中文显示设置。
2025-07-09 18:29:23
809
原创 day55 序列预测任务介绍
之前接触到的结构化数据,它本身不具备顺序,我们认为每个样本之间独立无关,样本之间即使调换顺序,仍然不影响模型的训练。但是日常中很多数据是存在先后关系的,而它们对应的任务是预测下一步的值,我们把这个任务称之为序列预测。举个例子,比如有过去30天的股票价格,我们希望预测第31天的价格。比如单车预测,有前60天的单车需求数据,希望预测后面20天的销量。或者文本,人的语言是有顺序的,预测下一个单词也是序列预测任务。
2025-07-08 17:47:49
808
原创 day54 Inception网络及其思考
Inception也就是GoogleNet,引出后面的特征融合和特征并行处理的思想传统计算机视觉发展史:LeNet-->AlexNet-->VGGNet-->I-->ResNetInception网络是Google团队在2014年提出的经典卷积神经网络。它的核心设计理念是“并行的多尺度融合”,通过在同一层网络中使用多个不同大小的卷积核(如1x1、3x3、5x5)以及池化操作,从不同尺度提取图像特征,然后将这些特征进行融合,从而在不增加过多计算量的情况下,获得更丰富的特征表达。
2025-07-07 17:38:09
1000
原创 day53 对抗生成网路
然后随机初始化这个造假币的a,每次给他随机的输入,他会生成不同的假币,每一张假币会让警察来判断,警察能够分别出真假,如果说你是假的,那么假币就要更新参数,如果是真的,那么造假币的参数就不用更新,警察就要更新参数。为了让警察能分辨真币,需要给他看真币的样子,也就是先训练警察知道什么是真币,但是只给他一个真币也没法训练,中间得掺杂一些无意义的噪声图片,无意义的肯定不可能是真币,所以他大概可以训练好。2. 生成器的损失:依靠判别器的损失,如果判别器说是假的,生成器损失就大,反之亦然。
2025-07-06 19:16:55
750
原创 day52 神经网络调参指南
正则化中,如果train的loss可以很低,但是val的loss还是很高,则说明泛化能力不够,优先让模型过拟合,再考虑加大正则化提高泛化能力,可以分模块来dropout,可以确定具体是哪部分参数导致过拟合,这里还有一个小技巧是引入残差链接后再利用dropout。预训练参数是最好的参数初始化方法,在训练前先找找类似的论文有无预训练参数,其次是Xavir,尤其是小数据集的场景,多找论文找到预训练模型最好的做法。同一层的神经元相当于在做完全相同的计算,无论输入如何变化,它们的输出模式始终一致。
2025-07-05 17:16:25
720
原创 day51 复习日:精度提高
作业:day43的时候我们安排大家对自己找的数据集用简单cnn训练,现在可以尝试下借助这几天的知识来实现精度的进一步提高。
2025-07-04 15:13:18
341
原创 day50 预训练模型+CBAM模块
现在思考下,是否卡一对于预训练模型增加模块来优化其效果,这里会遇到一个问题预训练模型的结构和权重是固定的,如果修改其中的模型结构,是否会大幅影响其性能。其次是训练的时候如何训练才能更好地避免破坏原有的特征提取器的参数。所以今天的内容需要回答2个问题:1. resnet18中如何插入cbam模块?2. 采用什么样的预训练策略,能更好地提升效率?可以很明显地想到,如果是resnet+cbam模块,那么大多数地方的代码都是可以复用的,模型定义部分需要重写。
2025-07-03 17:48:22
1076
原创 day49 CBAM注意力
CBAM是一种能够集成到任何卷积神经网络架构中的注意力模块。它的核心目标是通过学习的方式,自动获取特征图在通道和空间维度上的重要性,进而对特征图进行自适应调整,增强重要特征,抑制不重要特征,提升模型的特征表达能力和性能。简单来说,它就是像给模型装上了“智能眼镜”,让模型能够更精准地看到图像中的关键部分。
2025-07-02 17:39:21
324
原创 day48 随机函数与广播机制
最终输出尺寸: torch.Size([1, 10]) tensor([[-0.0386, -0.2336, -0.0063, 0.3311, -0.0155, -0.0789, -0.1411, 0.0415, -0.2819, -0.2241]], grad_fn=<AddmmBackward0>)向量: tensor([-0.6885, -1.0020, 0.2212, -0.5326, -1.6965]), 形状: torch.Size([5])-----维度必须满足广播规则,否则会报错。
2025-07-01 16:04:12
1045
原创 day47 注意力热图可视化
可视化部分同理,在训练完成后通过钩子函数取出权重或梯度,即可进行特征图的可视化,Grad-CAM课可视化、注意力热图可视化。- 若热力图错误聚焦背景(如红色区域在无关物体上),可能表示模型过拟合或训练不足。- 通道1可能关注整体轮廓,通道2关注纹理细节,通道3关注颜色分布。- 向非技术人员解释模型决策数据(如“模型认为这是狗,因为关注了眼睛和嘴巴”)。2. 热力图生成:将高权重通道的特征图缩放至原始图像尺寸,与原图叠加显示。- 检查模型是否关注正确区域(如识别狗时,是否聚焦狗而非背景)。
2025-06-30 15:15:58
486
原创 day46 通道注意力(SE注意力)
本文研究了通道注意力机制在CNN模型中的应用效果。首先介绍了注意力机制的基本概念,指出其通过动态权重聚焦关键信息的特点。随后构建了一个基础CNN模型在CIFAR-10数据集上进行训练,获得84.68%的测试准确率。通过特征图可视化分析,展示了不同卷积层提取的特征从低级到高级的抽象过程。在此基础上,引入了通道注意力模块(SE模块),该模块通过全局平均池化、全连接层和Sigmoid激活学习通道重要性权重。实验结果表明,加入通道注意力后模型准确率提升至85.38%,验证了注意力机制的有效性。研究采用消融实验方法,
2025-06-29 18:18:54
658
原创 day45 Tensor board使用介绍
之前的内容中,我们在神经网络训练中,为了帮助自己理解,借用了很多组件,比如训练进度条、可视化的loss下降曲线、权重分布图,运行结束后还可以查看单张图的推理效果。如果现在有一个交互工具可以很简单的通过按钮完成这些辅助功能就好了。所以现在介绍一下tensorboard这个可视化工具,它可以很方便的使用很多可视化的功能,有时是它可以在运行的过程中实时渲染,方便我们根据图来动态调整训练策略,而不是训练完后才知道好不好。
2025-06-28 17:13:07
1096
原创 day44 预训练模型
上图的层数,代表该模型不同的版本resnet有resnet18、resnet50、resnet152;efficientnet有efficientnet-b0、efficientnet-b1、efficientnet-b2、efficientnet-b3、efficientnet-b4等。
2025-06-27 17:29:26
769
原创 day43 复习日(猫狗图像分类)
创建模型return x# Grad-CAM实现# 注册钩子,用于获取目标层的前向传播输出和反向传播梯度# 前向钩子函数,在目标层前向传播后被调用,保存目标层的输出(激活值)# 反向钩子函数,在目标层反向传播后被调用,保存目标层的梯度# 在目标层注册前向钩子和反向钩子# 前向传播,得到模型输出# 如果未指定目标类别,则取模型预测概率最大的类别作为目标类别# 清除模型梯度,避免之前的梯度影响。
2025-06-26 18:25:10
337
原创 day42 Grad-CAM与Hook函数
在深度学习中,我们进场需要查看或修改模型中间层的输出或梯度。然而,标准的前向传播和反向传播过程通常是一个黑盒,我们很难直接访问中间层的信息。PyTorch提供了一种强大的工具——hook函数,它允许我们在不修改模型结构的情况下,获取或修改中间层信息。它的核心价值在于让开发者能够动态监听、捕获甚至修改模型内部任意层的输入/输出或梯度,而无需修改模型的原始代码结构。常用场景如下:1. 调试与可视化中间层输出2. 特征提取:如在图像分类模型中提取高层语义特征用于下游任务。
2025-06-25 16:50:32
1018
原创 day41 简单CNN
昨天学习可知,即使在深度神经网络情况下准确率仍然较差,这是因为特征没有被有效提取----真正重要的是特征的提取和加工过程。MLP把所有的像素全部展平了(这是全局的信息),无法布置到局部的信息,所以引入了卷积神经网络。
2025-06-24 18:13:00
677
原创 day40 训练和测试的规范写法
批量维度不变形:无论进行flatten、view还是reshape操作,第一个维度batch_size通常保持不变。动态维度指定:使用 -1 让PyTorch自动计算维度的大小,但需确保其他维度的指定合理,避免形状不匹配错误。
2025-06-23 17:30:17
807
原创 day39 图像数据与显存
先继续之前的代码from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加载数据的工具from torchvision import datasets, transforms # torchvision 是一个用于计算机视觉的库,datasets 和 transforms 是其中的模块# 设置随机种子,确保结果可复现# 1. 数据预处理,该写法非常类似于管道pipeline。
2025-06-22 16:56:03
824
原创 day38 Dataset和Dataloader类
核心结论Dataset类:定义数据的内容和格式(即“如何获取单个样本”),包括:- 数据存储路径/来源(如文件路径、数据库查询)- 原始数据的读取方式(如图像解码为PIL对象、文本读取为字符串)- 样本的预处理逻辑(如裁剪、翻转、归一化等,通常通过transform参数实现)- 返回格式(如(image_tensor ,label))DataLoader类:定义数据的加载方式和批量处理逻辑(即“如何高效批量获取数据”),包括:- 批量大小(batch_size)
2025-06-21 18:09:04
1004
原创 day37 早停策略和模型权重的保存
摘要:文章介绍了一个基于PyTorch的神经网络训练过程,重点探讨了过拟合检测和早停法(Early Stopping)的实现。在训练过程中,同步监测训练集和测试集的loss变化,当测试集loss连续多次(如50轮)未改善时触发早停,以保存最佳模型。该方案应用于鸢尾花和信贷数据集,实验结果显示早停机制有效防止过拟合,其中信贷数据集模型在600轮达到最佳状态(测试准确率70.6%)。此外,文章还详细介绍了模型参数保存、加载方法以及checkpoint机制,为模型训练中断后继续训练提供了解决方案。
2025-06-20 16:41:38
973
原创 day36 复习日(信贷神经网络)
训练进度: 100%|██████████| 100/100 [00:00<00:00, 201.31epoch/s, Loss=0.5917]对之前的信贷项目,利用神经网络训练下,尝试用到目前的知识点让代码更加规范和美观。
2025-06-19 17:01:33
321
原创 day33 MLP神经网络的训练
定义一个简单的全连接神经网络模型,包含一个输入层、一个隐藏层和一个输出层。定义层数+定义前向传播顺序import torch.nn as nn # 神经网络模块import torch.optim as optim # 优化器模块class MLP(nn.Module): # 定义一个多层感知机(MLP)模型,继承父类nn.Moduledef __init__: # 初始化函数super(MPL, self).__init__() # 调用父类的初始化函数# 前三行是八股文,后面是自定义的。
2025-06-16 18:54:05
717
原创 day32 官方文档的阅读
很多绘图工具都是调用的底层的绘图包,所以要想绘制出想要的图表,需要先了解底层绘图包的语法。他已经在图上被可视化出来了。我们已经掌握了相当多的机器学习和python基础知识,现在面对一个全新的官方库,看看是否可以借助官方文档的写法了解其如何使用。可以发现这个类继承了_InfoPlot类,此时我们再次进入_InfoPlot类里面,可以找到这个继承的plot方法。可以鼠标悬停在这个类上,来查看定义这个类所需要的参数,以及每个参数的格式。在官方文档介绍中的plot方法最下面,写明了参数和对应的返回值。
2025-06-15 17:09:12
769
原创 day31 文件的规范拆分和写法
昨天介绍了如何在不同文件中导入其他目录的文件,核心在于了解导入方式和python解释器检索目录的方式。搞清楚了这些,就可以看看,如何把一个文件拆分成多个具有独立功能的文件,然后通过import 的方式,来调用这些文件。这样有几个好处:1.可以让项目文件变得更加清晰和规范2.可以让项目文件更加容易维护,修改某一个功能的时候,只需要修改一个文件,而不需要修改多个文件3.文件变得更容易复用,部分通用的文件可以单独拿出来,进行其他项目的复用。
2025-06-14 17:26:22
750
原创 day30 模块和库的导入
本质:以.py为结尾的单个文件,包含python代码(函数、类、变量等)。- 作用:将代码拆分到不同文件中,避免代码冗余,方便复用和维护。
2025-06-13 16:07:16
927
原创 day29 类的装饰器
我们之前是用复用的思想来看装饰器的,换一个角度理解,当你想修改一个函数的时候,可以通过装饰器方法来修改而无需重新定义这个函数。所以还是需要理解装饰器的本质就是一个语法糖,对类而言:@decorator语法只是MyClass = decorato(Myclass)的简写,即是类已定义,仍可手动调用装饰器函数修改它。2.在类定义外部定义方法,然后把方法赋值给类的属性---这是一种动态方法,常在装饰器中使用,可以在外部修改类的方法。类也有装饰器,它的逻辑类似:接收一个类,返回一个修改后的类。
2025-06-12 15:48:38
454
原创 day28 类的定义和方法
类是对属性和方法的封装,可以理解为模版,通过对模版实例化可以实现调用类的属性和方法。比如创建一个随机森林类,然后就可以调用它的训练和预测方法。一个常见的类的定义包括了:1.关键字class2.类名3.语法固定符号冒号:4.一个初始化函数__init__(self)注意:init左右各有2个下划线__,需要传入self这个特殊的参数。
2025-06-11 17:14:32
1150
原创 day27 函数专题2:装饰器
装饰器本质上是一个python函数,它可以让其他函数或方法在不需要做任何代码修改的前提下增加额外功能。--本质是如果让一个函数具备太多功能,那么它看起来就会比较乱,可读性比较差,如果把其中一部分相同甚至可以复用的功能用一个新的函数来调用,然后让2个函数同时实现,就会做到1.进一步封装了函数的一些用法,做到dry原则(don't repeat yourself)2.使函数更加具有可读性所以装饰器本身就是函数中调用其他函数,实现先拆分函数,再合并函数的功能。
2025-06-10 16:20:24
950
原创 day26 函数专题1:函数定义与参数
"""Docstring: 描述函数的功能、参数和返回值(可选但强烈推荐)"""# 函数体: 实现功能的代码# ...return value # 可选,用于返回结果- def: 关键字,表示开始定义一个函数。- function_name: 函数的名称,应遵循Python的命名约定(通常是小写字母和下划线,例如 calculate_area,用英文单词含义和下划线来作为函数名)。
2025-06-09 17:39:39
643
原创 day25 异常处理
如果找到匹配的,则执行该 except 块中的代码,然后继续执行整个 try-except 结构之后的代码(除非 except 块中又引发了新异常或执行了 return/break/continue 等)。否则执行 else 块)。except:如果try块里的代码真出错了(从出错开始就不会执行try之后的代码了),python就会跳到except块里执行这里的代码,而不是崩溃。如果 try 失败:try 块中出错前的代码会执行,然后匹配的 except 块的代码会执行(else 块不会执行)。
2025-06-08 16:44:30
616
原创 day24 元组和OS模块
元组是python中一个内置数据类型,用于存储一系列有序的元素。元组中的元素可以是任何类型,包括数据、字符串、列表等,且元组之间用逗号分隔,整个元组用圆括号包围。对自己电脑的不同文件夹利用今天学到的知识操作下,理解下os路径。path = '/Users/wangbinhao/Desktop/毕业设计'/Users/wangbinhao/Desktop/毕业设计/.DS_Store/Users/wangbinhao/Desktop/毕业设计/基于SpringBoot技术的汽车维修系统.doc。
2025-06-07 16:44:06
955
原创 day23 pipeline管道
--- 定义不同列的类型和它们对应的预处理步骤 ---# 这些定义是基于原始数据 X 的列类型来确定的# 识别原始的 object 列 (对应你原代码中的 discrete_features 在预处理前)# 识别原始的非 object 列 (通常是数值列)# 有序分类特征 (对应你之前的标签编码)# 注意:OrdinalEncoder默认编码为0, 1, 2... 对应你之前的1, 2, 3...需要在模型解释时注意# 这里的类别顺序需要和你之前映射的顺序一致。
2025-06-06 15:15:45
964
原创 day21 常见的降维算法
通常情况下,我们提到特征降维,很多时候默认指的是无监督降维,这种方法只需要特征数据本身。但是实际上还包含一种有监督降维。 - 定义:这类算法在降维过程中不使用任何关于数据样本的标签信息(比如类别标签、目标值等)。它们仅仅根据数据点本身的分布、方差、相关性、局部结构等特性来寻找低维表示。 - 输入:只有特征矩阵 X。 - 目标: · 保留数据中尽可能多的方差(如PCA)。 · 保留数据的局部或全局流形
2025-06-04 18:00:04
914
原创 day20 奇异值SVD分解
与线性代数的关系:1.正交矩阵:列向量正交且单位化,在SVD中用于旋转和反射(U和V)2.特征值和特征向量:描述矩阵在某些方向上的缩放特性,是计算奇异值的基础3.实对称矩阵:具有实特征值和正交特征向量,SVD通过构造A^TA和AA^T利用其性质4.矩阵分解:将复杂矩阵分解为简单矩阵乘积,是降维和数据分析的核心工具奇异值分解(SVD)的输入和输出:- 输入:一个任意的矩阵A,尺寸为m*n(其中m是行,n是列,不必是方阵)。
2025-06-03 19:29:28
1119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅