- 博客(50)
- 收藏
- 关注
原创 day 50
`Conv2d: 1-1` 到 `MaxPool2d: 1-4`对输入图像进行初步的特征提取,并通过池化操作将特征图尺寸减半,为后续处理做准备。四个 `Sequential` 模块 (`1-5` 到 `1-8`)这是网络的主体,由多个残差块(`BasicBlock`)堆叠而成,负责从浅到深、从粗到细地学习图像特征。`AdaptiveAvgPool2d: 1-9` 和 `Linear: 1-10`
2025-06-11 22:53:23
807
原创 day 49
CBAM 由两个主要部分组成:通道注意力模块(Channel Attention Module)和空间注意力模块(Spatial Attention Module)。这两个模块顺序连接,共同作用于输入的特征图。SE 通道注意力的局限:仅关注 “哪些通道重要”,未考虑 “重要信息在空间中的位置”。CBAM 的突破:通道注意力(Channel Attention):分析 “哪些通道的特征更关键”(如图像中的颜色、纹理通道)。
2025-06-10 21:08:35
310
原创 day 48
在 PyTorch 中,torch.randn()是一个常用的随机张量生成函数,它可以创建一个由标准正态分布(均值为 0,标准差为 1)随机数填充的张量。这种随机张量在深度学习中非常实用,常用于初始化模型参数、生成测试数据或模拟输入特征。- size:必选参数,表示输出张量的形状(如(3, 4)表示 3 行 4 列的矩阵)。- dtype:可选参数,指定张量的数据类型(如torch.float32、torch.int64等)。
2025-06-08 19:54:59
890
原创 day 46
===================== 新增:通道注意力模块(SE模块) ====================="""通道注意力模块(Squeeze-and-Excitation)""""""参数:in_channels: 输入特征图的通道数reduction_ratio: 降维比例,用于减少参数量"""# 全局平均池化 - 将空间维度压缩为1x1,保留通道信息# 全连接层 + 激活函数,用于学习通道间的依赖关系# 降维:压缩通道数,减少计算量# 升维:恢复原始通道数。
2025-06-06 21:25:01
357
原创 day 44
假设一个神经网络层的输入为 $x$,期望学习的映射为 $H(x)$,在传统网络中,该层需要直接学习 $H(x)$。而在残差网络中,将该层改为学习残差函数 $F(x) = H(x) - x$,则输出变为 $y = F(x) + x$,这里的 $x$ 到 $y$ 的连接就是残差连接。在传统的神经网络中,每一层的输出都是对上一层输入进行一系列非线性变换的结果。而在残差网络(ResNet)中,引入了残差块(Residual Block),残差块通过残差连接将输入直接加到经过非线性变换后的输出上。
2025-06-04 23:14:05
261
原创 day 43
4. 定义CNN模型super(CNN, self).__init__() # 继承父类初始化# ---------------------- 第一个卷积块 ----------------------# 卷积层1:输入3通道(RGB),输出32个特征图,卷积核3x3,边缘填充1像素in_channels=3, # 输入通道数(图像的RGB通道)out_channels=32, # 输出通道数(生成32个新特征图)kernel_size=3, # 卷积核尺寸(3x3像素)
2025-06-02 20:22:14
326
原创 day 42
回调函数是作为参数传递给其他函数的函数,其目的是在某个特定事件发生时被调用执行。这种机制允许代码在运行时动态指定需要执行的逻辑,实现了代码的灵活性和可扩展性。回调函数的核心价值在于:1. 解耦逻辑:将通用逻辑与特定处理逻辑分离,使代码更模块化。2. 事件驱动编程:在异步操作、事件监听(如点击按钮、网络请求完成)等场景中广泛应用。3. 延迟执行:允许在未来某个时间点执行特定代码,而不必立即执行。
2025-06-01 23:32:17
464
原创 简单cnn
在图像数据预处理环节,为提升数据多样性,可采用数据增强(数据增广)策略。该策略通常不改变单次训练的样本总数,而是通过对现有图像进行多样化变换,使每次训练输入的样本呈现更丰富的形态差异,从而有效扩展模型训练的样本空间多样性。常见的修改策略包括以下几类1. 几何变换:如旋转、缩放、平移、剪裁、裁剪、翻转2. 像素变换:如修改颜色、亮度、对比度、饱和度、色相、高斯模糊(模拟对焦失败)、增加噪声、马赛克3. 语义增强(暂时不用):mixup,对图像进行结构性改造、cutout随机遮挡等。
2025-05-31 22:27:10
926
原创 day 40
output.max(1) : 返回 output 张量每一行的最大值和对应的索引, _ 表示忽略最大值, predicted 存储对应的索引,即预测的类别。- output = model(data) : 将输入数据 data 传入模型 model ,得到模型的输出 output。(data, target) : 是一个元组, data 是当前批次的样本数据, target 是对应的真实标签。- sum().item() : 统计布尔张量中 True 的数量,并转换为 Python 标量。
2025-05-30 22:01:48
421
原创 day 39
黑白图像# 定义两层MLP神经网络self.flatten = nn.Flatten() # 将28x28的图像展平为784维向量self.layer1 = nn.Linear(784, 128) # 第一层:784个输入,128个神经元self.relu = nn.ReLU() # 激活函数self.layer2 = nn.Linear(128, 10) # 第二层:128个输入,10个输出(对应10个数字类别)x = self.flatten(x) # 展平图像。
2025-05-29 23:19:31
400
原创 day 38
定义(即“如何获取单个样本”),包括:- 数据存储路径/来源(如文件路径、数据库查询)。- 原始数据的读取方式(如图像解码为PIL对象、文本读取为字符串)。- 样本的预处理逻辑(如裁剪、翻转、归一化等,通常通过`transform`参数实现)。- 返回值格式(如`(image_tensor, label)`)。重点:PyTorch 要求所有数据集必须实现__getitem__和__len__,这样才能被DataLoader等工具兼容。这是一种接口约定,类似函数参数的规范。
2025-05-27 22:14:46
493
原创 day 37
原理:保存模型的权重参数,不保存模型结构代码。加载时需提前定义与训练时一致的模型类。- 优点:文件体积小(仅含参数),跨框架兼容性强(需自行定义模型结构)。
2025-05-26 23:07:20
254
原创 day 34
self.fc1是一个实例化的对象,为什么具备了函数一样的用法,这是因为nn.Linear继承了nn.Module类,nn.Module类中定义了__call__方法。可以注意到,self.fc1 = nn.Linear(4, 10) 此时,是实例化了一个nn.Linear(4, 10)对象,并把这个对象赋值给了MLP的初始化函数中的self.fc1变量。- 而 nn.Module 的 __call__ 方法会调用子类的 forward 方法(即 self.fc1.forward(x))。
2025-05-23 22:51:51
301
原创 day 33
定义一个简单的全连接神经网络模型,包含一个输入层、一个隐藏层和一个输出层。定义层数+定义前向传播顺序class MLP(nn.Module): # 定义一个多层感知机(MLP)模型,继承父类nn.Moduledef __init__(self): # 初始化函数super(MLP, self).__init__() # 调用父类的初始化函数# 前三行是八股文,后面的是自定义的self.fc1 = nn.Linear(4, 10) # 输入层到隐藏层。
2025-05-22 23:20:27
238
原创 day 32
实例化要传入原始数据,包含多个特征的列表,这些特征的名称,标签,分桶方式等。绘制pdpbox库中的InteractTargetPlot实例。
2025-05-21 23:11:17
244
原创 day 31
1. 项目核心代码组织src/(source的缩写):存放项目的核心源代码。2. 配置文件管理config/ 目录:集中存放项目的配置文件,方便管理和切换不同环境(开发、测试、生产)的配置。3. 实验与探索代码notebooks/ 或 experiments/ 目录:用于初期的数据探索、快速实验、模型原型验证。4. 项目产出物管理data/ 目录:存放项目相关数据。
2025-05-20 22:07:41
964
原创 day 29
类装饰器 :本质是一个函数,接收一个类作为参数,返回一个新的类或者修改后的原类。类装饰器 :更适合对多个不相关的类添加相同的功能,能提高代码的复用性。类装饰器 :可以在不修改原有类定义的情况下,动态地为类添加功能。一个类可以被多个装饰器装饰,实现功能的组合。子类 :适合构建具有层次结构的类体系,通过继承关系可以清晰地表达类之间的关系,便于代码的维护和扩展。通过类装饰器,可以在不修改类内部代码的情况下,为多个类统一添加功能(如日志、统计)类有修饰器,他的逻辑:接收一个类,返回一个修改后的类。
2025-05-18 22:22:28
511
原创 day 28
一个常见的类的定义包括了:1. 关键字class2. 类名3. 语法固定符号冒号(:)4. 一个初始化函数__init__(self)
2025-05-17 22:41:07
840
原创 day 27
装饰器本质上是一个 Python 函数,它可以让其他函数或方法在不需要做任何代码修改的前提下增加额外功能。--本质是如果让一个函数具备太多功能,那么他看起来就会比较乱,可读性比较差,如果把其中一部分相同甚至可以复用的功能用一个新的函数来调用,然后让2个函数同时实现,就会做到1. 进一步封装了函数的一些用法,做到dry原则(don't repeat yourself)2. 使函数更加具有可读性。
2025-05-16 21:33:49
194
原创 day 25
2. 避免意外捕获: 如果把“成功后的后续步骤”也放在 try 块里,而这些步骤本身也可能引发 try 块想要捕获的同类型异常,那么就会导致逻辑混淆。原因:尝试导入一个不存在的模块,或者模块存在但其中的特定名称找不到, Python 的模块加载器找不到这个模块。1. 清晰性: 它清楚地将“主要尝试的操作(可能出错)”与“操作成功后的后续步骤”分开。原因: 尝试打开一个不存在的文件(通常是在读模式下),或者路径不正确。原因: 尝试使用一个未被定义的变量、函数或对象的名称。try: 包含可能引发异常的代码。
2025-05-14 21:38:15
280
原创 day 24
元组的特点:1. 有序,可以重复,这一点和列表一样2. 元组中的元素不能修改,这一点非常重要,深度学习场景中很多参数、形状定义好了确保后续不能被修改。
2025-05-13 20:21:12
493
原创 day 23
一般通用pipeline的实现流程:1.构建多个转换器(transformer),来实现对特征的预处理2.构建 ColumnTransformer,将不同的预处理应用于不同的列子集,构造一个完备的转化器3.构建完整的 Pipeline,将预处理器和模型串联起来。
2025-05-12 23:18:56
302
原创 day 22
选了3个模型进行训练,以精准度作为评判标准,最终是XGBoost的模型最好,所以用XGBoost进行预测。对于Ticket特征,统计其出现次数,并进行分箱,然后进行独热编码。对于Cabin特征,提取其前缀,对前缀的种类进行独热编码。对于Embarked特征,直接进行独热编码。最终将结果上传到平台,分数0.75837。对于Name特征,直接去除,不做处理。对于Sex特征,进行独热编码。
2025-05-11 22:59:32
215
原创 day21
定义:这类算法在降维过程中不使用任何关于数据样本的标签信息(比如类别标签、目标值等)。它们仅仅根据数据点本身的分布、方差、相关性、局部结构等特性来寻找低维表示。输入:只有特征矩阵 `X`。目标:1.保留数据中尽可能多的方差(如 PCA)。2.保留数据的局部或全局流形结构(如 LLE, Isomap, t-SNE, UMAP)。3.找到能够有效重构原始数据的紧凑表示(如 Autoencoder)。4.找到统计上独立的成分(如 ICA)。典型算法:6.Autoencoders (基本形式)
2025-05-10 22:47:16
775
原创 day 20
奇异值分解(SVD)将原始矩阵 A 分解为 A = UΣVᵀ,可完全重构 A 且无信息损失。实际应用中,常筛选排序靠前的奇异值及对应向量实现降维或数据压缩:1. 排序特性 :Σ 矩阵对角线上奇异值降序排列,大值代表主要信息,小值代表次要信息或噪声,其大小反映对 A 的贡献程度。2. 筛选规则 :选前 k 个奇异值(k 小于矩阵秩),常见规则有固定数量、累计方差贡献率达阈值、按奇异值下降“拐点”截断。
2025-05-09 22:54:13
235
原创 day18
簇 1 人群:中年男性主导,年龄跨度较宽,最大心率偏高,心脏供血指标及心肌缺血表现有特征,心脏病高风险人群。簇 3 人群:女性占优,年龄范围广,最大心率有区间特征,心脏相关指标多样,心脏病风险较复杂人群。以聚类得到的簇类别作为标签构建监督模型,进而根据重要性筛选特征,来确定要根据哪些特征赋予含义。簇 2 人群:集中于中年男性,最大心率适中,心脏供血及缺血情况典型,心脏病中高风险人群。簇 4 人群:以中年男性为主,最大心率分布明确,心脏供血指标有特点,心脏病中风险人群。特征可以定义为心脏风险综合特征。
2025-05-07 21:21:45
193
原创 day 17
当希望快速得到聚类评估结果,且数据集噪声较少时,可选择 DB 指数最低的 k 值作为最佳簇数量。当数据集规模较小,且希望得到直观的聚类质量评估时,可选择轮廓系数最高的 k 值作为最佳簇数量。当数据集规模较大,且希望快速评估聚类效果时,可选择 CH 指数最高的 k 值作为最佳簇数量。- 对非凸簇不友好 :处理非凸形状的簇时,DB 指数可能无法准确评估聚类效果。- 对凸形簇敏感 :在处理非凸形状的簇时,轮廓系数可能无法准确评估聚类效果。- 计算效率高 :相比轮廓系数,计算复杂度较低,尤其适用于大规模数据集。
2025-05-06 17:44:46
294
原创 day 15
今天针对之前学习过的知识对一个新的数据进行机械学习:数据来源地址:学生习惯与学习成绩 --- Student Habits vs Academic Performance可以看到,有7个object数据,其中,除了gender,其余的都可以认为是有顺序的,而id这个特征没有什么用,所以接下来,对gender做独热编码,对id特征直接丢掉,其余的object数据做标签编码。特征只有一个有缺失值,所以之后用众数进行缺失值的补充。独热编码去掉id特征补充缺失值划分数据集
2025-05-04 22:40:13
435
原创 day 12
总的来说,粒子群算法通过模拟粒子在搜索空间中的移动,不断更新粒子的位置和速度,利用个体经验和群体经验来引导搜索方向,最终找到最优解。# bounds:超参数的取值范围,是一个包含多个元组的列表,每个元组表示一个超参数的最小值和最大值。- 如果某个粒子的新适应度值优于其个体最优适应度值,则更新该粒子的个体最优位置和适应度值。- 如果某个粒子的个体最优适应度值优于全局最优适应度值,则更新全局最优位置和适应度值。# w:惯性权重,控制粒子的惯性,影响粒子在搜索空间中的移动速度和方向。
2025-05-01 20:46:44
318
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅