自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 8.25 打卡 day51 复习日

定义通道注意力"""通道注意力机制初始化参数:in_channels: 输入特征图的通道数ratio: 降维比例,用于减少参数量,默认为16"""# 全局平均池化,将每个通道的特征图压缩为1x1,保留通道间的平均值信息self.avg_pool = nn.AdaptiveAvgPool2d(1)#计算每个通道特征图中所有像素的平均值# 全局最大池化,将每个通道的特征图压缩为1x1,保留通道间的最显著特征。

2025-08-25 17:51:22 464

原创 8.23打卡 DAY 50 预训练模型+CBAM模块

今天,我们将把之前学到的知识融会贯通,探讨如何将 CBAM 这样的注意力模块应用到强大的预训练模型(如 ResNet)中,并学习如何高效地对这些模型进行微调,以适应我们自己的任务。

2025-08-23 08:15:00 839

原创 8.22打卡 DAY 49 CBAM注意力

CBAM (Convolutional Block Attention Module) 是一种轻量级、通用的注意力模块,可以无缝集成到任何卷积神经网络 (CNN) 架构中。它的核心思想是通过学习的方式,让模型自动判断出特征图中哪些通道(what)和哪些空间位置(where)更重要,然后对这些重要特征进行增强,同时抑制不重要的特征。简单来说,CBAM 就像给模型装上了一副“智能眼镜”,让模型不仅能看到图像中的内容,还能更精准地聚焦于最关键的部分。

2025-08-22 08:30:00 2180

原创 8.21打卡 DAY 48 随机函数与广播机制

今天我们将补充学习两个在深度学习中至关重要的基础概念:随机函数和广播机制。深刻理解张量的维度变化,是未来掌握复杂网络结构的关键。在深度学习实践中,我们经常需要生成随机张量。例如,在模型训练开始前,需要随机初始化权重参数;或者在设计网络时,我们需要验证一个特定维度的输入数据经过不同模块后,其输出维度如何变化。这时,使用随机函数可以方便地构造出所需格式的张量,而无需加载真实的图片数据。随机函数有很多种,它们主要区别在于生成数据的概率分布不同。我们先掌握最常用的 即可。 是 PyTorch 中最常用的随机函数之

2025-08-21 10:20:13 907

原创 8.20 打卡 DAY 47 注意力热图可视化

通常,我们用暖色调(如红色、黄色)代表数值较高或密度较大的区域,用冷色调(如蓝色、绿色)代表数值较低的区域。这项技术不仅能帮助我们调试模型,更能让我们直观地理解模型在做出决策时,究竟关注了图像的哪些部分。通过这种方式,我们不仅验证了模型的有效性,还让模型不再是一个“黑箱”,它的决策过程变得直观可见。,深入探讨它的原理、代码实现,并分析如何通过它来揭示模型的“思考过程”。我们今天的注意力热力图,本质上就是第一种和第二种的结合:我们找出。的几个特征通道,并将这些通道的激活图以热力图的形式展示出来。

2025-08-20 23:10:27 1236

原创 8.19打卡 DAY 46 通道注意力(SE注意力)

在认知科学中,注意力指的是人类选择性地关注部分信息,而忽略其他信息的认知过程。通过这样的插入,模型在每次池化降维之前,都会先对特征通道进行一次“筛选”,这有助于将最重要的信息传递给下一层。在昨天的课程中,我们已经学习了如何可视化CNN在不同卷积层输出的特征图。这个向量的每个元素可以看作是对应通道特征图的全局“感受野”,代表了这个通道的整体响应强度。——为例,详细讲解其原理、如何将其集成到我们已有的CNN模型中,并通过可视化来直观地感受它的作用。这样,重要的通道特征会被放大,不重要的通道特征则会被抑制。

2025-08-19 22:30:06 789

原创 8.18 打卡 DAY 45 Tensorboard使用介绍

在之前的学习中,我们为了解训练过程,用了很多“手动”的辅助工具,比如打印loss、使用matplotlib绘制静态的准确率曲线等。比如下图中,模型将一张真实的“卡车(truck)”错误地预测为了“汽车(car)”,这说明模型在区分这两种相似类别时还存在困难。简单来说,TensorBoard是TensorFlow生态中官方的可视化工具(现在也已完美兼容PyTorch),就像是给模型训练过程装上了一个“监控仪表盘”。用于观察模型参数(权重)和梯度的分布情况,是诊断梯度消失/爆炸等问题的利器。

2025-08-18 23:11:46 1113

原创 8.17打卡 DAY 44 预训练模型

这并非由过拟合导致,而是因为深度网络极难训练,尤其是梯度在反向传播时逐层衰减,导致深层网络的参数无法有效更新(即。我们可以直接利用这个训练好的模型的网络结构和权重参数,作为我们自己任务的起点。通过利用预训练模型,我们可以用更少的时间和数据,训练出性能更优的模型。这就引出了一个自然的想法:如果我们能用一组“更好”的初始参数来开始训练,不仅能加速训练,还可能获得更好的结果。:这是一个评估指标,指模型预测的概率最高的5个类别中,不包含正确答案的概率。在之前的训练中,我们模型的参数通常是随机初始化的。

2025-08-17 11:42:20 942

原创 8.16打卡 DAY43 复习日

kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化。进阶:并拆分成多个文件。

2025-08-16 20:17:25 247

原创 8.14打卡 DAY 42 Grad-CAM与Hook函数

你可以把它理解为一个“钩子”,预先设定好,当某个条件满足时(例如,一个训练周期结束),这个函数就会被自动触发。Grad-CAM是一种非常流行的模型可解释性技术,它能够生成一张热力图,直观地显示出模型在做出特定分类决策时,主要依赖了输入图像的哪些区域。在这个例子中,你可以清晰地看到模型在识别“狗”时,其注意力主要集中在图像中狗的面部和身体区域,这证明了模型学到了正确的特征。务必亲手实践今天的代码,尝试更换不同的图片、模型和目标层,观察热力图的变化,这将加深你对模型工作原理的理解。欢迎来到第42天的学习!

2025-08-14 18:37:41 671

原创 8.13打卡 DAY 41 简单CNN

昨天我们发现,即使加深了网络,普通的多层感知机(MLP)在处理像CIFAR-10这样的图像任务时,准确率也难以突破瓶颈(大约50-55%)。:使用这个简单的CNN,CIFAR-10的测试准确率可以轻松达到**75%-80%**以上,远超MLP的50%左右。:对训练集中的每张图片进行一系列随机的几何或像素变换,生成“新”的、但语义不变的训练样本。通过可视化这些中间层的特征图,我们可以更好地理解CNN的学习过程,这也是深度学习可解释性的一个重要方向。它保留了空间维度(高和宽),而通道数则由卷积核的数量决定。

2025-08-13 22:06:02 890

原创 8.12 打卡 DAY 40 训练和测试的规范写法

通过绘制**每次迭代(iteration/batch)**的损失,而不是每个epoch的平均损失,我们可以更精细地观察模型的学习过程。你会看到损失曲线虽然有波动,但总体趋势是向下的。你会发现,即使我们加深了网络并使用了Dropout,MLP在CIFAR-10上的准确率也只能达到50-55%左右。CNN就是为了解决这个问题而设计的,它能够有效地保留并学习图像的空间特征。这部分也和昨天一样,我们定义好MLP模型,并初始化损失函数和优化器。层,这意味着在训练时,每个神经元的输出都有20%的概率被“丢弃”。

2025-08-12 07:45:00 2393

原创 8.11 打卡 DAY 39 图像数据与显存

与之前我们接触的表格数据(通常是二维的:样本数 × 特征数)不同,图像数据是三维的,包含了空间信息。对于最基础的全连接神经网络(MLP),它的输入要求是一个一维向量。但我们的图像数据是二维(灰度图)或三维的(彩色图),所以第一步需要。在前向传播过程中,每一层的输出(激活值)都需要被保存下来,因为反向传播计算梯度时需要用到它们。今天我们一起学习深度学习中一个非常重要的部分:如何处理图像数据,以及如何管理我们宝贵的显存资源。不同的优化器会存储不同的中间状态,这也会占用显存。的图像 -> 展平为。

2025-08-11 13:17:26 916

原创 8.10 打卡 DAY 38 Dataset和Dataloader类

为了更好地引入Dataset和Dataloader的概念,我们将使用一个非常经典的计算机视觉数据集——MNIST手写数字数据集。内容:包含0到9共10个类别的手写数字灰度图片。规模:60,000张训练图片和10,000张测试图片。尺寸:每张图片大小为28x28像素。由于其数据维度相对较小,MNIST既可以被当作结构化数据(将28x28=784个像素点展平)用MLP训练,也可以被当作图像数据用卷积神经网络(CNN)训练,是学习和实验的绝佳选择。Dataset类的核心职责非常明确:它告诉程序数据在哪里。

2025-08-09 07:00:00 1078

原创 8.8打卡 DAY 37 早停策略和模型权重的保存

从上图可以清晰地看到,训练集损失(蓝线)一直在下降,而测试集损失(橙线)在下降到某个点后开始上升,这就是典型的过拟合。通过这种“见好就收”的方式,我们可以在模型达到最佳泛化能力时停止训练,有效避免其在训练后期对训练数据产生过拟合。深度学习模型训练耗时耗力,我们必须学会保存训练成果,以便后续进行推理、微调或从中断处继续训练。当一个模型在训练数据上表现极好,但在未见过的新数据(测试集或验证集)上表现糟糕时,我们就说它。:对信贷数据集训练后保存权重,加载权重后继续训练50轮,并采取早停策略。

2025-08-08 08:00:00 1560

原创 day 36

【代码】day 36。

2025-08-07 08:00:00 333

原创 8.6 打卡 DAY 35 模型可视化与推理

和torchinfo是两个非常有用的第三方库,可以生成一个清晰的表格来展示模型每一层的输出形状和参数数量。我们更推荐torchinfo,因为它提供了更详细和结构化的信息。MLP [3] --解读: 显示了数据经过每一层后的形状。Param #: 精确计算了每一层的可学习参数数量。: 输入4个神经元,输出10个。参数量 = 4 * 10 (权重) + 10 (偏置) = 50。: 输入10个神经元,输出3个。参数量 = 10 * 3 (权重) + 3 (偏置) = 33。

2025-08-06 08:00:00 806

原创 8.5 打卡 DAY 34 GPU训练及类的call方法

在这个小任务中,

2025-08-05 08:00:00 891

原创 8.4 打卡 DAY 33: 第一个神经网络 - MLP的构建与训练

多层感知机(Multi-Layer Perceptron),简称MLP,是神经网络最基本的一种结构。输入层 (Input Layer):接收最原始的数据。比如在我们的鸢尾花项目中,输入层就有4个神经元,分别对应4个特征(花萼长、宽等)。隐藏层 (Hidden Layers):位于输入层和输出层之间,负责从数据中提取更复杂、更抽象的特征。一个MLP可以没有隐藏层,也可以有一个或多个。正是这些隐藏层让神经网络拥有了强大的学习能力。输出层 (Output Layer):产生最终的预测结果。

2025-08-04 14:38:36 2997

原创 8.3 打卡 DAY 32: 如何阅读官方文档

通过观察线的走势,我们可以得出结论,例如:随着萼片宽度的增加,模型预测为类别0(山鸢尾)的概率是如何变化的。理解返回值至关重要,因为它让我们不仅能“看到”图,还能“拿到”图背后的数据和对象,进行后续的修改和分析。这个对象是底层库的对象,我们可以用底层库的语法对它进行二次修改。,如果你安装的库版本较旧,查阅最新(latest)的文档可能会导致参数不匹配或功能缺失。,它可以展示当其他所有特征保持不变时,单个特征的变化对模型预测结果的影响。官方文档中的其他类,绘制相应的图,任选即可。)来完成实际的渲染工作。

2025-08-03 08:00:00 1004

原创 8.2 打卡 DAY 31: 文件的规范拆分和写法

今天,我们将学习一项更高级、更具工程思维的技能:如何将一个庞大的代码文件(比如一个Jupyter Notebook)拆分成结构清晰、功能独立的多个文件。这样做的好处是显而易见的:要合理拆分,首先要理解项目的生命周期。一个典型的机器学习项目通常遵循以下流程,这也为我们的文件拆分提供了天然的逻辑依据:一个专业的项目,其文件组织方式通常是固定的。下面是一个推荐的、非常通用的机器学习项目结构:起步思路总结:你一定在很多Python脚本中见过这行代码。它的作用是定义程序的执行入口。使用它的好处:这行代码用于声明文件

2025-08-02 08:00:00 695

原创 8.1 打卡 DAY 30: 模块和库的导入

Python之所以强大,正是因为它拥有一个庞大且活跃的生态系统,几乎所有你能想到的任务,都有现成的库帮你完成。今天我们学习一个至关重要的话题:如何在你的项目中组织代码并使用他人的代码。通常,你在IDE(如VSCode、PyCharm)中打开的项目文件夹,就是执行代码时的根目录。这个例子完整地演示了如何在不同包和模块之间进行导入,这是构建任何复杂Python项目的基础。,因为它会“污染”你的命名空间,极易引发命名冲突,让代码难以阅读和维护。当你的项目代码越来越多时,就需要把它们拆分到不同的文件中进行管理。

2025-08-01 11:16:51 601

原创 7.31 打卡 DAY 29 复习日:类的装饰器

在上面的例子中,这行代码可能让你感到新奇。它演示了一种动态地为类添加方法的方式。通常,我们都在class代码块内部用def来定义方法。但Python的灵活性允许我们在外部定义一个函数,然后将其“赋值”给类的一个属性,从而使其成为类的新方法。特性类内部定义方法外部赋值定义方法语法在class块内使用def定义函数后赋值给类属性(如作用域方法可以直接访问类的其他私有成员需要通过self或类名显式访问动态性类定义后方法固定可以在运行时动态添加/修改方法常见场景常规类定义装饰器、元类、动态编程。

2025-07-31 10:59:01 833

原创 7.30打卡 day28 类的定义和方法

今天我们将深入学习面向对象编程(OOP)的核心概念——类(Class)。之前我们已经接触并实例化过很多类(比如),现在是时候学习如何亲手定义自己的类了。这不仅能加深你对程序结构的理解,也为后续学习复杂的深度学习模型框架打下坚实基础。pass要求包含属性:半径radius。和。初始化时需传入半径,默认值为 1。答案与讲解import math # 我们需要 math 库来获取 π 的值"""定义一个圆类""""""初始化方法。- radius=1 设置了参数的默认值。

2025-07-30 10:47:02 845

原创 7.29 打卡 day27 函数专题2-装饰器

它本质上是一个函数,这个函数接收另一个函数作为输入,并返回一个新的函数作为输出。这个新的函数通常会在调用原函数之前或之后,执行一些额外的操作。最直接但最“笨”的方法是,去修改这个函数原来的代码,把日志和计时代码加进去。想象一下,你有一个核心功能函数,比如一个计算用户订单总价的函数。的装饰器,在函数执行前打印日志信息(如函数名、传入的参数),在函数执行后打印日志信息(如函数名、返回值)。通过这个作业,你不仅学会了装饰器的标准写法,更理解了如何处理参数和返回值,让你的装饰器变得更加通用和强大。

2025-07-29 11:18:32 1022

原创 7.28打卡 day26 函数专题

函数内部可以访问外部的全局变量,但函数外部无法访问函数内部的局部变量。这就像你在自己家里(函数内)可以看到外面的街道(全局),但街上的人(外部)看不到你家里的具体情况(局部)。+ 鼠标点击 查看一些库函数的源码时,会发现它们的参数定义比我们写的要复杂。:当函数参数较多时,强烈推荐使用关键字参数的方式来调用,这样能大大提高代码的可读性。变量不是在程序的任何地方都可以使用的,它有自己的“作用范围”或“地盘”。的形式传递,可以忽略参数的顺序,让代码更清晰易读。这是最简单的函数,它只执行一个固定的操作。

2025-07-28 10:38:07 918

原创 day25

如果文件不存在,程序会捕捉到 FileNotFoundError,然后执行 except 块中的 print 语句,优雅地提示用户,而不是用一堆红色报错信息吓到他们。它的逻辑非常直白:尝试(try) 做某件事,如果出了异常(except),就按照我指定的方式来处理。这些红色的文字不是你的敌人,而是帮助你成长的“提示器”。如果食谱要求你加盐,但你发现盐罐是空的,这时你该怎么办?对于机器学习任务来说,你可能会遇到各种各样的数据或模型问题,良好的异常处理能确保你的训练或预测流程不会因为一些小问题而全盘中断。

2025-07-27 22:46:23 474

原创 7.26 day24 元组和OS模块

摘要:Python 元组与OS模块 本文介绍了Python中两个重要知识点:元组和OS模块。元组是一种不可变的有序序列,常用于存储不应修改的数据(如模型配置)。其特点包括创建方式(圆括号/逗号)、索引访问和切片操作。OS模块则提供了操作系统交互功能,包括获取当前路径(os.getcwd())、列出目录内容(os.listdir())、安全拼接路径(os.path.join())和遍历目录树(os.walk())等核心方法。这些功能在机器学习项目中尤为重要,可用于管理数据集、模型文件等。文章还展示了元组在Sc

2025-07-26 07:00:00 806

原创 7.25打卡 day23 pipeline管道

1. 矩阵乘法:需要满足第一个矩阵的列数等于第二个矩阵的行数,和线代的矩阵乘法算法相同。4. 矩阵求逆:需要满足矩阵是方阵且行列式不为0,然后使用伴随矩阵除以行列式得到逆矩阵。2. 矩阵点乘:需要满足两个矩阵的行数和列数相同,然后两个矩阵对应位置的元素相乘。1. 在后续深度学习中,我们经常需要对数据进行随机化处理,以确保模型的泛化能力。5. 矩阵求行列式:需要满足矩阵是方阵,然后使用代数余子式展开计算行列式。2. 为了测试很多函数的性能,往往需要随机化生成很多数据。3. 矩阵转置:将矩阵的行和列互换。

2025-07-25 11:02:04 172

原创 7.24 打卡 day22 复习日

自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码。仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。

2025-07-24 09:12:46 167

原创 7.23打卡 day21 常见的降维算法

想象一下,你有一份描述客户的电子表格,里面有100列(也就是100个特征)。人脑几乎不可能理解这100个特征之间的复杂关系,而机器学习模型处理这么多特征时也可能会遇到困难。

2025-07-23 09:22:39 960

原创 7.22 打卡 day20

对于任何的矩阵都可以做等价的奇异值SVD分解,并进行奇异值和特征向量的选取,进而实现重构。同时,使用Frobenius 范数相对误差来衡量原始矩阵和重构矩阵的差异。总而言之,针对结构化数据,奇异值分解就是一种特征降维的处理手段,能提高计算效率并减少过拟合风险,而sklearn库中也提供了相应的模块TruncatedSVD。在机器学习中,就是将m个特征降维成k个新特征(k的选择需要注意),新特征是原始特征的线性组合。svd之前数据需要进行标准化(均值为0,方差为1)

2025-07-22 08:44:06 168

原创 7.21 打卡 day19

递归特征消除(RFE):此方法用于从一组特征中选择对模型性能贡献最大的特征子集,通过不断递归移除不重要特征直至预设值或者某条件达成,结束递归。在实际工程过程中,可能存在很多的特征,但是为了避免不必要的计算,需要对特征进行筛选来选取合适的特征。主要的方式有特征筛选以及特征组合。特征筛选:利用特征的某些性质来筛选合适的特征,主要有如下三种。

2025-07-21 09:10:26 281

原创 7.20 打卡 day18 推断聚类后簇的类型

【代码】7.20 打卡 day18 推断聚类后簇的类型。

2025-07-20 22:51:57 181

原创 7.19 打卡 day17 Numpy数组

矩阵乘法:需要满足第一个矩阵的列数等于第二个矩阵的行数,和线代的矩阵乘法算法相同。矩阵求逆:需要满足矩阵是方阵且行列式不为0,然后使用伴随矩阵除以行列式得到逆矩阵。矩阵点乘:需要满足两个矩阵的行数和列数相同,然后两个矩阵对应位置的元素相乘。在后续深度学习中,我们经常需要对数据进行随机化处理,以确保模型的泛化能力。矩阵求行列式:需要满足矩阵是方阵,然后使用代数余子式展开计算行列式。为了测试很多函数的性能,往往需要随机化生成很多数据。矩阵转置:将矩阵的行和列互换。

2025-07-19 23:16:09 279

原创 优快云自带Markdown语法笔记

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S

2025-07-19 23:13:19 698

原创 7.18 打卡 day15 复习

尝试找到一个kaggle或者其他地方的结构化数据集,用之前的内容完成一个全新的项目,这样你也是独立完成了一个专属于自己的项目。仔细回顾一下之前14天的内容,没跟上进度的同学补一下进度。包含电机运行时多个传感器数据(温度、转速、电流、电压等)。适合回归任务(预测温度)或分类任务(预测故障)。

2025-07-17 17:53:49 294

原创 7.17 打卡 day14 SHAP

SHAP 属于模型事后解释的方法,它的核心思想是计算特征对模型输出的边际贡献,再从全局和局部两个层面对“黑盒模型”进行解释。SHAP构建一个加性的解释模型,所有的特征都视为“贡献者”。关键特点全局与局部解释:单个预测:解释哪些特征推动预测上升/下降(如“为什么模型预测某人患癌症概率为90%?”)。整体模型:总结特征重要性(如“年龄”对糖尿病预测的长期影响)。一致性:若特征实际重要性更高,其 SHAP 值绝对值必然更大(优于传统方法如特征重要性)。

2025-07-17 11:45:05 468

原创 7.16 打卡 day13 不平衡数据的处理

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

2025-07-16 09:15:21 1009

原创 7.15 打卡 day12 启发式算法

目标:我们想为模型找到一组最佳的配置(超参数)。困难:手动一个个去试所有组合太耗时了,几乎不可能。遗传算法的解决思路:它模仿生物进化的方式进行智能搜索。从一个随机的种群(多组解)开始。评估每个解的好坏(适应度)。让好的解进行交叉(繁衍),产生结合了父母优点的后代。再加入一点随机变异,以探索新的可能性。经过多代迭代,整个种群就会向着最优解的方向“进化”。@浙大疏锦行。

2025-07-15 15:49:53 1062

空空如也

空空如也

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

TA关注的人

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