<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[z_reset的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/z_reset</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; z_reset]]></copyright><item><title><![CDATA[Day 48 随机函数与广播机制]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151296808</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151296808</guid><author>z_reset</author><pubDate>Sun, 07 Sep 2025 23:38:03 +0800</pubDate><description><![CDATA[知识点回顾：随机张量的生成：torch.randn函数卷积和池化的计算公式（可以不掌握，会自动计算的）pytorch的广播机制：加法和乘法的广播机制ps：numpy运算也有类似的广播机制，基本一致。]]></description><category></category></item><item><title><![CDATA[Day 47 注意力热图可视化]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151264566</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151264566</guid><author>z_reset</author><pubDate>Sat, 06 Sep 2025 23:36:51 +0800</pubDate><description><![CDATA[这个注意力热图是通过钩子机制 register_forward_hook 捕获最后一个卷积层（conv3）的输出特征图。热力图（红色表示高关注，蓝色表示低关注）半透明覆盖在原图上。]]></description><category></category></item><item><title><![CDATA[Day 46 通道注意力(SE注意力)]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151232696</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151232696</guid><author>z_reset</author><pubDate>Fri, 05 Sep 2025 23:36:36 +0800</pubDate><description><![CDATA[通道注意力（Channel Attention）属于注意力机制（Attention Mechanism）的变体，而非自注意力（Self-Attention）的直接变体。特征图本质就是不同的卷积核的输出，浅层指的是离输入图近的卷积层，浅层卷积层的特征图通常较大，而深层特征图会经过多次下采样，尺寸显著缩小，尺寸差异过大时，小尺寸特征图在视觉上会显得模糊或丢失细节。从数学角度看，注意力机制是对输入特征进行加权求和，不同于卷积的固定权重，注意力是“动态权重”的特征提取，输入数据不同权重不同。]]></description><category></category></item><item><title><![CDATA[Day 45 Tensorboard使用介绍]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151194408</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151194408</guid><author>z_reset</author><pubDate>Thu, 04 Sep 2025 21:54:08 +0800</pubDate><description><![CDATA[你可以用它直观看到训练过程中的数据变化（比如损失值、准确率）、模型结构、数据分布等，不用盯着一堆枯燥的数字看，对新手非常友好。监控模型参数（如权重 weights）和梯度（grads）的分布变化，诊断训练问题（如梯度消失 / 爆炸）。2.记录标量数据（Scalar）:记录每个batch（批次）的损失和准确率，以及每个epoch（轮次）的训练指标。1.在训练过程中tensorboard将训练数据和模型结构信息记录到日志文件（.tfevents）文件中。2.保存训练集和验证集的loss变化曲线，无需手动打印。]]></description><category></category></item><item><title><![CDATA[Day 44 预训练模型]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151155188</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151155188</guid><author>z_reset</author><pubDate>Wed, 03 Sep 2025 23:24:48 +0800</pubDate><description><![CDATA[训练策略那么什么模型会被选为预训练模型呢？比如一些调参后表现很好的cnn神经网络（固定的神经元个数+固定的层数等）。所以调用预训练模型做微调，本质就是 用这些固定的结构+之前训练好的参数 接着训练所以需要找到预训练的模型结构并且加载模型参数相较于之前用自己定义的模型有以下几个注意点1. 需要调用预训练模型和加载权重2. 需要resize 图片让其可以适配模型3. 需要修改最后的全连接层以适应数据集。]]></description><category></category></item><item><title><![CDATA[Day43 复习日]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151122536</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151122536</guid><author>z_reset</author><pubDate>Tue, 02 Sep 2025 23:45:01 +0800</pubDate><description><![CDATA[设置batch_size,以及shuffle=ture，训练集打乱顺序，测试集不打乱，增强鲁棒性，防止模型学习到顺序。weights = torch.mean(self.gradients, dim=(2, 3))：对空间维度求平均，得到每个特征图的重要性权重。数据预处理管道，调整图像像素，转化为pytorch张量，进行像素值归一化，标准化。Grad-CAM原理：通过梯度计算卷积层特征图对类别预测的重要性，生成类别激活热力图。- torch.no_grad() ：禁用梯度计算，提高效率。]]></description><category></category></item><item><title><![CDATA[Day42 Grad-CAM与Hook函数]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151080091</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151080091</guid><author>z_reset</author><pubDate>Mon, 01 Sep 2025 23:53:48 +0800</pubDate><description><![CDATA[知识点回顾回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例由于标准的前向传播和反向传播过程是一个黑盒，我们很难直接访问中间层的信息，所以很难经常查看或修改模型中间层的输出或梯度。PyTorch提供了hook函数来帮助我们在不修改模型结构的情况下，获取或修改中间层的信息。常用场景如下：1.调试与可视化中间层输出2.特征提取，在图像分类模型中提取高层语义特征用于下游任务3.梯度分析与修改，在训练过程中，对某些层进行梯度裁剪或缩放来改变模型的动态。]]></description><category></category></item><item><title><![CDATA[Day 41 简单CNN ]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151048875</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151048875</guid><author>z_reset</author><pubDate>Sun, 31 Aug 2025 19:51:34 +0800</pubDate><description><![CDATA[知识回顾数据增强卷积神经网络定义的写法batch归一化：调整一个批次的分布，常用与图像数据特征图：只有卷积操作输出的才叫特征图调度器：直接修改基础学习率卷积操作常见流程如下：输入 → 卷积层 → Batch归一化层（可选） → 池化层 → 激活函数 → 下一层Flatten -> Dense (with Dropout，可选) -> Dense (Output)]]></description><category></category></item><item><title><![CDATA[Day 40 训练和测试的规范写法]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/151026014</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/151026014</guid><author>z_reset</author><pubDate>Sat, 30 Aug 2025 23:02:00 +0800</pubDate><description><![CDATA[知识点回顾：彩色和灰度图片测试和训练的规范写法：封装在函数中展平操作：除第一个维度batchsize外全部展平dropout操作：训练阶段随机丢弃神经元，测试阶段eval模式关闭dropout作业：仔细学习下测试和训练代码的逻辑，这是基础，这个代码框架后续会一直沿用，后续的重点慢慢就是转向模型定义阶段了。图像数据的格式以及模型定义的过程与结构化数据的不同主要体现在以下两个方面：1.模型定义的时候需要展平图像。]]></description><category></category></item><item><title><![CDATA[Day 39 图像数据与显存]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150995476</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150995476</guid><author>z_reset</author><pubDate>Fri, 29 Aug 2025 21:12:35 +0800</pubDate><description><![CDATA[图像相关的神经网络的定义知识点回顾图像数据的格式：灰度和彩色数据模型的定义显存占用的4种地方模型参数+梯度参数优化器参数数据批量所占显存神经元输出中间状态batchisize和训练的关系灰度图像作为图像数据，相较于结构化数据（表格数据）他的特点在于他每个样本的的形状并不是(特征数，)，而是(宽，高，通道数)结构化数据（如表格）的形状通常是 (样本数, 特征数)，例如 (1000, 5) 表示 1000 个样本，每个样本有 5 个特征。]]></description><category></category></item><item><title><![CDATA[Day 38 Dataset和Dataloader类]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150964080</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150964080</guid><author>z_reset</author><pubDate>Thu, 28 Aug 2025 23:49:10 +0800</pubDate><description><![CDATA[定义一个简单的全连接神经网络模型，包含一个输入层、一个隐藏层和一个输出层定义层数+定义前向传播顺序输入42个特征，输出分两类，经过独热编码后特征从17变到了42class MLP(nn.Module): #定义一个多层感知机（MLP）模型，继承父类nn.Moduledef __init__(self): #初始化函数super(MLP, self).__init__() #调用父类的初始化函数# 前三行是八股文，后面的网络层是自定义的。]]></description><category></category></item><item><title><![CDATA[Day 37 早停策略和模型权重的保存]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150934735</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150934735</guid><author>z_reset</author><pubDate>Wed, 27 Aug 2025 23:30:38 +0800</pubDate><description><![CDATA[如果可以监控验证集的指标不再变好，此时提前终止训练，避免模型对训练集过度拟合。深度学习中模型的保存与加载主要涉及参数（权重）和整个模型结构的存储，同时需兼顾训练状态（如优化器参数、轮次等）以支持断点续训。可以看到，虽然损失值在下降，但是仍要考虑是否会出现过拟合现象，由于模型过度学习了训练集的信息，导致在测试集上表现不理想。原理：保存模型参数、优化器状态（学习率、动量）、训练轮次、损失值等完整训练状态，用于中断后继续训练。过拟合：训练集损失持续下降，但测试集损失在某一时刻开始上升（或不再下降）。]]></description><category></category></item><item><title><![CDATA[Day 36 复习日]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150876223</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150876223</guid><author>z_reset</author><pubDate>Tue, 26 Aug 2025 23:40:13 +0800</pubDate><description><![CDATA[今天是复习日，神经网络与机器学习最大的不同就是不止固定的三行代码，需要自己定义一个模型，先继承类的属性，然后去写自己的属性，以及前向传播方法，可以手动构建：中间层的数量、每一层的神经元数、激活函数选什么、损失函数选什么、以及梯度下降的步长。前面的一些官方文档阅读，信贷模型训练，明日定敲代码实践。计算损失：使用损失函数来评估预测与真实标签之间的差距。权重更新：使用优化器调整步长，更新模型的权重。前向传播：通过模型传输如数据来计算预测。直到损失不变则代表训练完成。反向传播：根据损失计算梯度。]]></description><category></category></item><item><title><![CDATA[Day 35 模型可视化与推理]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150793788</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150793788</guid><author>z_reset</author><pubDate>Mon, 25 Aug 2025 23:25:58 +0800</pubDate><description><![CDATA[但是在使用该方法时，input_size=(4,) 参数是必需的，因为 PyTorch 需要知道输入数据的形状才能推断模型各层的输出形状和参数数量。因此，要生成模型摘要（如每层的输出形状、参数数量），必须提供一个示例输入形状，让 PyTorch “运行” 一次模型，从而推断出各层的信息。尤其在深度学习这种训练是循环的场景中。这是最基础、简单的方法，直接打印模型对象，输出模型的结构，显示模型中各个层的名称和参数信息。该方法不显示输入层的尺寸，因为输入的神经网是自己设置的，所以不需要显示输入层的尺寸。]]></description><category></category></item><item><title><![CDATA[Day 34 ]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150725295</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150725295</guid><author>z_reset</author><pubDate>Sun, 24 Aug 2025 23:45:44 +0800</pubDate><description><![CDATA[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 慢的现象。]]></description><category></category></item><item><title><![CDATA[Day33 MLP神经网络的训练]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150656345</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150656345</guid><author>z_reset</author><pubDate>Sat, 23 Aug 2025 22:58:59 +0800</pubDate><description><![CDATA[神经网络由于内部比较灵活，所以封装的比较浅，可以对模型做非常多的改进，而不像机器学习三行代码固定。与机器学习中最大的不同。定义一个简单的全连接神经网络模型，包含一个输入层、一个隐藏层和一个输出层。训练时，要关注每个epoch训练完后测试集的表现：测试集的loss和准确度。查看显卡信息的命令行命令（cmd中使用）数据预处理（归一化、转换成张量）PyTorch和cuda的安装。模型训练，定义损失函数和优化器。定义层数+定义前向传播顺序。继承nn.Module类。定义损失函数和优化器。]]></description><category></category></item><item><title><![CDATA[Day 32 官方文档的阅读]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150608791</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150608791</guid><author>z_reset</author><pubDate>Fri, 22 Aug 2025 15:07:12 +0800</pubDate><description><![CDATA[3. 官方文档：https://pdpbox.readthedocs.io/en/latest/1. GitHub 仓库：https://github.com/SauceCat/PDPbox。2. PyPI 页面：https://pypi.org/project/PDPbox/在官方文档中搜索函数名，然后查看函数的详细说明和用法示例。参考pdpbox官方文档中的其他类，绘制相应的图，任选即可。官方文档的阅读和使用：要求安装的包和文档为同一个版本。官方文档的检索方式：github和官网。]]></description><category></category></item><item><title><![CDATA[Day 31 文件的规范拆分和写法]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150581962</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150581962</guid><author>z_reset</author><pubDate>Thu, 21 Aug 2025 14:59:47 +0800</pubDate><description><![CDATA[比如一个包含数据处理模块 data_processing.py、模型训练模块 model_training.py 的机器学习项目，在 model_training.py 中用 if __name__ == "__main__" 包裹训练相关的主逻辑代码，运行该文件时就知道需要从这里开始执行（其他文件都是附属文件），让项目结构和执行流程更清晰。如果直接运行这个文件，则__name__等于__main__，若这个文件被其他模块导入，则__name__不等于__main__。这些可复用代码通常会被整理到项目的。]]></description><category></category></item><item><title><![CDATA[Day 30 模块和库导入]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150551459</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150551459</guid><author>z_reset</author><pubDate>Wed, 20 Aug 2025 13:12:26 +0800</pubDate><description><![CDATA[from math import *`：这种方法将 `math` 模块中的所有公开的函数和变量导入到当前的命名空间中，可以直接使用这些函数和变量而无需 `math.` 前缀。`import math`：这种方法会将整个 `math` 模块导入到命名空间中，但是需要使用 `math.` 前缀来访问模块内的函数或变量。`import math`：明确指出了函数和变量来源于 `math` 模块，这对代码的可读性和维护性都是有益的。其他阅读你代码的人可以清楚地看到每个函数的来源，这对大型项目和团队合作尤为重要。]]></description><category></category></item><item><title><![CDATA[Day 29 类的装饰器]]></title><link>https://blog.youkuaiyun.com/z_reset/article/details/150523062</link><guid>https://blog.youkuaiyun.com/z_reset/article/details/150523062</guid><author>z_reset</author><pubDate>Tue, 19 Aug 2025 13:54:32 +0800</pubDate><description><![CDATA[我们之前是用复用的思想来看装饰器的，换一个角度理解，当你想修改一个函数的时候，可以通过装饰器方法来修改而无需重新定义这个函数。---理解动态的含义。2. 在类定义外部定义方法，然后把方法赋值给类的属性---这是一种动态方法，常在装饰器中使用，可以再外部修改类的方法。核心的区别就是类装饰器是可以直接修改类的定义的，但是函数装饰器是在不修改函数代码的前提下拓展功能。通过类装饰器，可以在不修改类内部代码的情况下，为多个类统一添加功能（如日志、统计）类也有修饰器，他的逻辑类似：接收一个类，返回一个修改后的类。]]></description><category></category></item></channel></rss>