- 博客(52)
- 收藏
- 关注
原创 【Python打卡Day50】预训练模型与CBAM注意力@浙大疏锦行
现在我们思考下,是否可以对于预训练模型增加模块来优化其效果,这里我们会遇到一个问题:预训练模型的结构和权重是固定的,如果修改其中的模型结构,是否会大幅影响其性能。其次是训练的时候如何训练才可以更好的避免破坏原有的特征提取器的参数。所以今天的内容,我们需要回答2个问题。1. resnet18中如何插入cbam模块?2. 采用什么样的预训练策略,能够更好的提高效率?可以很明显的想到,如果是resnet18+cbam模块,那么大多数地方的代码都是可以复用的,模型定义部分需要重写。先继续之前的代码。
2025-06-21 16:08:14
785
原创 【Python打卡Day49】CBAM注意力 @浙大疏锦行
提升模型的特征表达能力和性能。轻量级设计:仅增加少量计算量(全局池化 + 简单卷积),适合嵌入各种 CNN 架构(如 ResNet、YOLO)。它的核心目标是通过学习的方式,自动获取特征图在通道和空间维度上的重要性,进而对特征图进行自适应调整,(Channel Attention):分析 “哪些通道的特征更关键”(如图像中的颜色、纹理通道)。双重优化:同时提升通道和空间维度的特征质量,尤其适合复杂场景(如小目标检测、语义分割)。输入特征图 → 通道注意力模块 → 空间注意力模块 → 输出增强后的特征图。
2025-06-20 17:36:25
305
原创 【Python打卡Day48】随机张量与广播机制@浙大疏锦行
在继续讲解模块消融前,先补充几个之前没提的基础概念尤其需要搞懂张量的维度、以及计算后的维度,这对于你未来理解复杂的网络至关重要。
2025-06-19 17:00:37
961
原创 【Python打卡Day43】自定义项目 @浙大疏锦行
流行街头食品分类 该数据集旨在支持开发和评估用于分类世界各地流行街头食品的图像的机器学习模型。它包含高质量的、标记的图像数据,代表了不同地区和文化中常见的各种街头食品类别。kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化。进阶:并拆分成多个文件。
2025-06-18 23:01:25
210
原创 【Python打卡Day22】kaggle泰坦尼克@浙大疏锦行
选择6个特征字段:`["Pclass", "Sex", "SibSp", "Parch", "Fare", "Embarked"]`关键参数:100棵树(`n_estimators=100`),最大深度5(`max_depth=5`)分类变量编码:对"Sex"和"Embarked"列使用`LabelEncoder`进行数值化转换。分别读取训练集(`train.csv`)和测试集(`test.csv`)从训练集中提取目标标签`y`("Survived"列)使用处理后的训练特征`X`和标签`y`训练模型。
2025-06-18 22:49:10
305
原创 【Python打卡Day47】注意力热力图可视化@浙大疏锦行
通过钩子捕获中间层特征图并可视化,能了解 CNN 的工作机制。这不仅满足对 AI 工作原理的好奇,更重要的是为模型调试、提升性能和建立对 AI 系统的信任提供有力工具。@浙大疏锦行。
2025-06-17 23:44:56
950
原创 【Python打卡Day46】通道注意力@浙大疏锦行
===================== 新增:通道注意力模块(SE模块) ====================="""通道注意力模块(Squeeze-and-Excitation)""""""参数:in_channels: 输入特征图的通道数reduction_ratio: 降维比例,用于减少参数量"""# 全局平均池化 - 将空间维度压缩为1x1,保留通道信息# 全连接层 + 激活函数,用于学习通道间的依赖关系# 降维:压缩通道数,减少计算量# 升维:恢复原始通道数。
2025-06-17 16:44:37
924
原创 【Python打卡Day45】 Tensorboard使用介绍 @浙大疏锦行
之前的内容中,我们在神经网络训练中,为了帮助自己理解,借用了很多的组件,比如训练进度条、可视化的loss下降曲线、权重分布图,运行结束后还可以查看单张图的推理效果。如果现在有一个交互工具可以很简单的通过按钮完成这些辅助功能那就好了。所以我们现在介绍下tensorboard这个可视化工具,他可以很方便的很多可视化的功能,尤其是他可以在运行过程中实时渲染,方便我们根据图来动态调整训练策略,而不是训练完了才知道好不好。
2025-06-17 16:44:16
768
原创 【Python打卡Day44】预训练模型 @浙大疏锦行
上图的层数,代表该模型不同的版本resnet有resnet18、resnet50、resnet152;efficientnet有efficientnet-b0、efficientnet-b1、efficientnet-b2、efficientnet-b3、efficientnet-b4等。
2025-06-17 00:04:08
958
原创 【Python打卡Day42】Grad-CAM @浙大疏锦行
在深度学习中,我们经常需要查看或修改模型中间层的输出或梯度。然而,标准的前向传播和反向传播过程通常是一个黑盒,我们很难直接访问中间层的信息。PyTorch 提供了一种强大的工具——hook 函数,它允许我们在不修改模型结构的情况下获取或修改中间层的信息。它的核心价值在于让开发者能够动态监听、捕获甚至修改模型内部任意层的输入 / 输出或梯度,而无需修改模型的原始代码结构。常用场景如下:1. 调试与可视化中间层输出2. 特征提取:如在图像分类模型中提取高层语义特征用于下游任务。
2025-06-16 16:07:33
2001
原创 【Python打卡Day41】简单CNN@浙大疏锦行
可以看到即使在深度神经网络情况下,准确率仍旧较差,这是因为特征没有被有效提取----真正重要的是特征的提取和加工过程。MLP把所有的像素全部展平了(这是全局的信息),无法布置到局部的信息,所以引入了卷积神经网络。(在之前的复试班已经交代清楚了,如果不清楚什么是卷积神经网络,请自行学习下相关概念)基本框架在传统机器学习中,特征工程是一个手动的过程,涉及从原始数据中提取和构造有助于模型学习的特征。而在深度学习中,特别是CNN,这些层的作用正是从原始输入数据(如图像)中逐层自动学习和提取有用的特征表示。
2025-06-15 00:28:44
855
原创 【Python打卡Day40】训练与测试的规范写法 @浙大疏锦行
批量维度不变性:不管是进行 flatten、view 还是 reshape 操作,第一个维度batch_size通常都保持不变。动态维度指定:使用-1能让 PyTorch 自动计算该维度的大小,但要保证其他维度指定合理,避免出现形状不匹配的错误。
2025-06-14 17:04:18
814
原创 【Python打卡Day39】图像数据与显存 @浙大疏锦行
从这里开始我们进入到了图像数据相关的部分,也是默认你有之前复试班计算机视觉相关的知识,但是一些基础的概念我仍然会提。昨天我们介绍了minist这个经典的手写数据集,作为图像数据,相较于结构化数据(表格数据)他的特点在于他每个样本的的形状并不是(特征数,),而是(宽,高,通道数)# 先继续之前的代码from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加载数据的工具。
2025-06-14 01:15:55
842
原创 【Python打卡Day38】Dataset和Dataloader类 @浙大疏锦行
核心结论Dataset类:定义数据的内容和格式(即“如何获取单个样本”),包括:数据存储路径/来源(如文件路径、数据库查询)。原始数据的读取方式(如图像解码为PIL对象、文本读取为字符串)。样本的预处理逻辑(如裁剪、翻转、归一化等,通常通过transform参数实现)。返回值格式(如(image_tensor, label))。DataLoader类:定义数据的加载方式和批量处理逻辑(即“如何高效批量获取数据”),包括:批量大小(batch_size)。是否打乱数据顺序(shuffle)
2025-06-13 19:33:00
945
原创 【Python打卡Day37】早停策略和模型权重的保存 @浙大疏锦行
DAY 37 早停策略和模型权重的保存仍然是循序渐进,先复习之前的代码训练集的loss在下降,但是有可能出现过拟合现象:模型过度学习了训练集的信息,导致在测试集上表现不理想。所以很自然的,我们想同步打印测试集的loss,以判断是否出现过拟合现象。
2025-06-13 00:26:43
683
原创 【Python打卡Day36】信贷项目的神经网络训练@浙大疏锦行
2. 隐藏层维度(50)的确定 设计选择:这是可调整的超参数,没有固定答案 选择原则: 通常取输入维度和输出维度的中间值(31 → 50 → 10) 复杂问题可用更大维度(如128、256) 简单问题可用更小维度(如16、32) 经验公式:输入维度和输出维度的几何平均数 $\sqrt{31 \times 10} \approx 17.6$ → 取整为16-20,但实际常取2的幂次(32、64)3. 输出维度(10)的确定 由任务决定: 分类任务:等于类别数量。测试集准确率: 77.07%
2025-06-12 21:13:51
478
原创 【Python打卡Day35】模型可视化与推理@浙大疏锦行
nn.Linear(4, 10) 只定义了 “输入维度是 4,输出维度是 10”,但不知道输入的批量大小和其他维度,比如卷积层需要知道输入的通道数、高度、宽度等信息。Linear-1对应self.fc1 = nn.Linear(4, 10),表明前一层有4个神经元,这一层有10个神经元,每2个神经元之间靠着线相连,所有有4*10个权重参数+10个偏置参数=50个参数。因此,要生成模型摘要(如每层的输出形状、参数数量),必须提供一个示例输入形状,让 PyTorch “运行” 一次模型,从而推断出各层的信息。
2025-06-12 18:46:54
782
原创 【Python打卡Day34】GPU训练和call方法@浙大疏锦行
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-06-12 00:06:30
917
原创 【Python打卡Day33】简单神经网络@浙大疏锦行
DAY33默认大家已经有一定的神经网络基础,该部分已经在复试班的深度学习部分介绍完毕,如果没有,你需要自行了解下MLP的概念。你需要知道梯度下降的思想激活函数的作用损失函数的作用优化器神经网络的概念神经网络由于内部比较灵活,所以封装的比较浅,可以对模型做非常多的改进,而不像机器学习三行代码固定。## 🧩* **核心思想:** 模仿人脑神经元的工作方式(尽管是极度简化的版本),从数据中学习复杂的模式和关系。* **结构:**
2025-06-11 16:26:00
2088
原创 【Python打卡Day32】官方文档的阅读@浙大疏锦行
插件地址](https://microsoftedge.microsoft.com/addons/detail/%E6%B2%89%E6%B5%B8%E5%BC%8F%E7%BF%BB%E8%AF%91-%E7%BD%91%E9%A1%B5%E7%BF%BB%E8%AF%91%E6%8F%92%E4%BB%B6-pdf%E7%BF%BB%E8%AF%91-/amkbmndfnliijdhojkpoglbnaaahippg)1. 库的官方文档是用来知道这个库有什么方法的。
2025-05-27 16:13:34
815
原创 【Python打卡Day31】文件的拆分与使用@浙大疏锦行
**models/ 目录**:专门存放训练好的模型文件,根据模型保存格式不同,可能是 `.pkl`(Python pickle 格式,常用于保存 sklearn 模型 )、`.h5`(常用于保存 Keras 模型 )、`.joblib` 等。2. 另一个是pylance,用于代码提示和类型检查,这个插件会根据你的代码中的类型注解,给出相应的提示和检查,比如你定义了一个函数,参数类型是int,那么当你传入一个字符串时,它会提示你传入的参数类型不正确。** 这是最基本也是最有价值的一步。
2025-05-27 14:46:16
822
原创 【Python打卡Day30】模块与包的导入@浙大疏锦行
from math import *`:这种方法将 `math` 模块中的所有公开的函数和变量导入到当前的命名空间中,可以直接使用这些函数和变量而无需 `math.` 前缀。学习python本身就是个伪命题,就像你说学习科目一样,你没说清晰你学习的具体科目是什么,也没说学这个科目的哪些章节,毕竟每个科目都很大-----要有以终为始的思想。OpenCV的核心是用C++编写,并且已经编译成二进制文件,编译后的二进制文件可以在不同操作系统上运行,Python中的用户通常不能直接看到方法的源代码。
2025-05-23 22:08:33
808
原创 【Python打卡Day29】类的装饰器@浙大疏锦行
回顾一下,函数的装饰器是 :接收一个函数,返回一个修改后的函数。我们之前是用复用的思想来看装饰器的,换一个角度理解,当你想修改一个函数的时候,可以通过装饰器方法来修改而无需重新定义这个函数。注意到其中的cls.log = log_message 这行代码,他把外部的函数赋值给了类的新定义的属性,这里我们介绍这种写法。2. 在类定义外部定义方法,然后把方法赋值给类的属性---这是一种动态方法,常在装饰器中使用,可以再外部修改类的方法。类也有修饰器,他的逻辑类似:接收一个类,返回一个修改后的类。
2025-05-23 09:18:24
195
原创 【Python打卡Day28】类的定义与方法@浙大疏锦行
所以,当你需要一个语法上存在的代码块,但又暂时不想在其中放入任何实际的逻辑时,pass 就是一个完美的占位符,它告诉解释器:“这里有一个代码块,但它什么也不做。比如self.name,就代表着:“自己的名字”,self等于“自己”,这个self指向类的实例化地址,传入的self.xx是它的属性。作用:定义类的构造函数 __init__,用于初始化实例。普通方法和init方法的差别在于,init方法是类的构造方法,当创建对象时,会自动调用init方法----只要你创建这个类对象了,这个init函数就会执行。
2025-05-22 23:39:56
635
原创 【Python打卡Day27】函数专题2:装饰器@浙大疏锦行
装饰器函数返回的是wrapper函数,所以,在调用装饰器函数的时候,返回的还是wrapper函数,而不是被修饰的函数。4. **替换原函数**:`display_time` 返回 `wrapper` 函数,Python 用这个新函数**覆盖**了原来的 `prime_nums`。可以看到,上述这个写法的时候,prime_nums()没有传入参数,如果函数有参数,那么必须给外部函数传入参数,也就是需要给外部的装饰器函数传入参数。所以装饰器本身就是函数中调用其他函数,实现先拆分函数,再合并函数的功能。
2025-05-19 17:26:33
827
原创 【Python打卡Day26】函数专题1:函数定义与参数 @浙大疏锦行
DAY 26 函数专题1:函数定义与参数到目前为止,我们已经使用了许多Python内置的函数(如 print(), len(), sum(), range())以及各种库(如NumPy, Pandas)提供的函数。这些函数就像是别人为我们准备好的工具。今天,我们将学习如何创建自己的工具——自定义函数。## 函数的定义函数的基本写法如下所示:```python"""Docstring: 描述函数的功能、参数和返回值 (可选但强烈推荐)"""# 函数体: 实现功能的代码# ...
2025-05-19 16:49:35
1028
原创 【Python打卡Day25】异常处理机制 @浙大疏锦行
如果找到匹配的,则执行该 except 块中的代码,然后继续执行整个 try-except 结构之后的代码(除非 except 块中又引发了新异常或执行了 return/break/continue 等)。else 块中的代码不会被同一个 try 块的 except 子句捕获。ai写代码的时候,经常会遇到try-except的异常处理模块,这是因为大部分大模型在后训练阶段都是经过强化学习训练的,为了确保结果的正确运行,只有采取 try-except的异常处理模块才能提高模型运行成功的概率。
2025-05-14 15:58:28
789
原创 【Python打卡Day24】元组和OS模块 @浙大疏锦行
os.walk 会首先访问起始目录 (my_project),然后它会选择第一个子目录 (data) 并深入进去,访问 data 目录本身,然后继续深入它的子目录 (processed -> raw)。只有当 data 分支下的所有内容都被访问完毕后,它才会回到 my_project 这一层,去访问下一个子目录 (src),并对 src 分支重复深度优先的探索。当前访问目录 (dirpath): my_project/src # <--- 回溯到 my_project,然后深入到 src。
2025-05-13 23:44:25
340
原创 【Python打卡Day23】管道/流水线工程 @浙大疏锦行
-所以说管道工程最大的优势,是把操作和参数分割开来,只要熟悉整个流程,不需要阅读完整的代码去找对应操作的部分了,只需要在参数列表中设置好参数,就可以完成整个流程。之前我们说有时候有的类不好记忆,用的时候想不起来,简单的函数也可以实现。之所以提到管道,是因为后续你在阅读一些经典的代码的时候,尤其是官方文档,非常喜欢用管道来构建代码,甚至深度学习中也有类似的代码,初学者往往看起来很吃力。在机器学习中,通常会按照一定的顺序对数据进行预处理、特征提取、模型训练和模型评估等步骤,以实现机器学习模型的训练和评估。
2025-05-12 17:42:18
991
原创 【Python打卡Day21】常见的降维算法 @浙大疏锦行
作为降维技术时,其核心目标是找到一个低维特征子空间(即原始特征的线性组合),使得在该子空间中,不同类别的数据点尽可能地分开(类间距离最大化),而同一类别的数据点尽可能地聚集(类内方差最小化)。PCA 的目标是保留数据的全局方差,而 t-SNE 的核心目标是在高维空间中相似的数据点,在降维后的低维空间中也应该保持相似(即彼此靠近),而不相似的点则应该相距较远。它们的目标是找到一个低维子空间,在这个子空间中,不同类别的数据点能够被更好地分离开,或者说,这个低维表示更有利于后续的分类(或回归)任务。
2025-05-11 11:37:30
740
原创 【Python打卡Day20】奇异值分解 @浙大疏锦行
总结:SVD 分解后原始矩阵是等价的,但通过筛选排序靠前的奇异值和对应的向量,我们可以实现降维,保留数据的主要信息,同时减少计算量和噪声影响。模型基于这 10 个特征进行训练。降维与近似:保留前 k 个奇异值后,我们只取 U矩阵的前 k 列(记为 Uk,尺寸为 m×k)、Σ 矩阵的前 k 个奇异值(记为 Σk,尺寸为 k×k)、以及 VT 矩阵的。奇异值分解(SVD)后,原始矩阵 A被分解为 A=UΣVT,这种分解是等价的,意味着通过 U、Σ 和 VT 的乘积可以完全重构原始矩阵 A,没有任何信息损失。
2025-05-10 00:04:15
748
原创 【Python打卡Day19】特征筛选 @浙大疏锦行
保留的特征: ['max_heart_rate_achieved', 'st_depression', 'num_major_vessels', 'sex_male', 'chest_pain_type_atypical angina', 'exercise_induced_angina_yes', 'st_slope_flat', 'st_slope_upsloping', 'thalassemia_fixed defect', 'thalassemia_reversable defect']
2025-05-09 16:14:20
761
原创 【Python打卡Day18】聚类 进一步推断类型 @浙大疏锦行
现在需要给这个簇赋予实际的含义,一般当你赋予实际含义的时候,你需要根据某几个特征来赋予,但是源数据特征很多,如何选择特征呢?**定义**:以**固定性心脏缺陷(fixed defect)为主的高风险群体**。**定义**:以**正常地中海贫血类型为主,ST段有异常的低风险群体**,总体可能是亚健康或轻度异常者。**定义**:以**可逆性缺陷为主的中风险群体**,可能为中期心脏病患者,部分存在 ST 段异常。***【上面这个思路好好学,这是真干货,构造具有价值的特征工程,妥妥的创新点和工作量】***
2025-05-08 21:38:22
713
原创 【Python打卡Day17】聚类一算法 @浙大疏锦行
距离越小,则差异越小。- 轮廓系数越接近 **-1**,表示样本与其所属簇内样本较远,与其他簇较近,聚类效果越差(可能被错误分类)。- **需预先指定 `k` 值**:对簇数量 `k` 的选择敏感,不合适的 `k` 会导致聚类效果较差。- 轮廓系数越接近 **1**,表示样本与其所属簇内其他样本很近,与其他簇很远,聚类效果越好。- **不适合非球形簇**:对非线性可分或形状复杂的簇效果较差,无法处理簇密度不均的情况。- **定义**:DB 指数衡量簇间距离与簇内分散度的比值,用于评估簇的分离度和紧凑度。
2025-05-08 19:39:50
680
原创 【Python打卡Day16】NumPy数组的创建 与 shap值的深入理解 @浙大疏锦行
在后续进行频繁的数学运算时,尤其是在深度学习领域,对 NumPy 数组的理解非常有帮助,因为 PyTorch 或 TensorFlow 中的 Tensor 张量本质上可以视为支持 GPU 加速和自动微分的 NumPy 数组。shap_values[:, :, 0] 的每一行代表的是 一个特定样本每个特征对于预测类别的贡献值(SHAP 值)。值得注意的是,二维数组不一定是正方形(即行数等于列数),它可以是任意的 n * m 形状,其中 n 是行数,m 是列数。
2025-05-06 20:43:45
929
原创 【Python打卡Day15】自定义项目 @浙大疏锦行
基于机器学习模型的地应力反演回归分析。2.1对方向信息进行独热编码。2.2对L1-L7进行标准化。
2025-05-05 23:44:32
286
原创 【Python打卡Day14】shap可解释性分析 @浙大疏锦行
3)特征 A 的边际贡献: 对于每一个特征组合,比较“包含特征 A 的组合的预测值”与“不包含特征 A 但包含其他相同特征的组合的预测值”之间的差异。列表的第 k 个元素是一个 (n_samples, n_features) 的数组,表示所有样本的所有特征对预测类别 k 的贡献。(5)SHAP 值之和: 对于任何一个样本的预测,所有特征的 SHAP 值加起来,再加上基准值,就精确地等于该样本的模型预测值。对 n_samples 个样本中的每一个,计算 n_features 个特征各自的 SHAP 值。
2025-05-03 11:13:57
873
原创 【Python打卡Day13】不平衡数据处理 @浙大疏锦行
在处理类别不平衡的数据集时,标准机器学习算法(如默认的随机森林)可能会过度偏向多数类,导致对少数类的预测性能很差。目的: 在不改变已训练好的模型的情况下,根据业务需求调整精确率(Precision)和召回率(Recall)之间的权衡。总之,修改权重旨在训练一个“更好”的模型,而修改阈值是在一个“已有”模型上调整其表现。当模型错误分类一个具有高权重的少数类样本时,会受到更大的惩罚(更高的损失值)。对于少数类中的每个样本,计算它与少数类中其他样本的距离,得到其k近邻(一般k取5或其他合适的值)。
2025-05-02 16:19:31
737
原创 【Python打卡Day12】启发式算法 @浙大疏锦行
表现好的个体(高验证分)更有机会“繁殖”(它们的参数组合会被借鉴和混合),并可能发生“变异”(参数随机小改动),产生下一代。简单理解: 从一个随机的超参数组合开始。应用感觉: 像一个有点“冲动”的探险家,初期愿意尝试一些看起来不太好的路径(为了跳出局部最优的小山谷),后期则越来越“保守”,专注于在当前找到的好区域附近精细搜索。也就是说,即使搞懂了这段代码,提升也微乎其微,因为你无法对他进行改进(他永远是别人的东西),而且就算背熟悉了他,也对学习其他的方法没什么帮助,即使学完遗传算法学粒子群,也没有帮助。
2025-05-01 23:03:40
1890
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅