- 博客(46)
- 收藏
- 关注
原创 十分钟上手:Distilling the Knowledge in a Neural Network
在知识蒸馏中采用高温(T>1)软化概率分布的核心目的在于:通过放大教师模型输出概率中次要类别的信号,使学生模型不仅能够学习到基础的正确分类结果(硬目标),更重要的是掌握教师模型对类别间相似性的深层理解(如"猫与狗的视觉特征比猫与汽车更接近")。概述:知识蒸馏是一种模型压缩技术,通过让轻量化的学生模型模仿复杂教师模型的输出概率分布,结合软目标和硬目标进行训练,从而将教师模型的泛化能力迁移至学生模型,实现小模型的高效部署而不显著降低性能。: 是教师模型通过 带温度参数(T)的softmax 输出的概率分布。
2025-04-07 19:30:34
763
原创 空洞卷积(膨胀卷积)(Dilated Convolution / Atrous Convolution)
Fw×Fh 是卷积核尺寸。理论输出尺寸: 8x8。实际输出尺寸: 8x8。理论输出尺寸: 6x6。实际输出尺寸: 6x6。理论输出尺寸: 4x4。实际输出尺寸: 4x4。理论输出尺寸: 2x2。实际输出尺寸: 2x2。⌊x⌋ 表示向下取整。
2025-03-14 20:16:29
189
原创 Efficient Attention: Attention with Linear Complexities(高效注意力)
简述:提出了一种新的有效的注意机制,相当于点积注意,但其内存和计算成本大大降低。总的来说可以大大减少计算开销且不太会影响效果,更多细节阅读原文。其实可以看出做的工作就是将传统Q,K,V,相乘的顺序改变了。但是在代码中步骤应该是如下图所示。在代码中就是softmax函数。
2025-01-20 20:07:48
465
原创 DiT模块解释
主干第二部分:拥有原始输入特征并且融入全局特征的输入,首先经过LN层归一化再经过自适应缩放和位移,再经过FFN也就是经过一个全连接层再经过一个激活函数再经过一个全连接层,作用是弥补了Attention的不足,专注于对每个Token的独立特征进行细粒度调整,再经过一个全局缩放变量控制模块输出强度,最后再经过一个残差确保Pointwise Feedforward模块的输出和输入特征的有效结合,同时增强模型的训练稳定性和特征表达能力。扩散模型中的 Noise 实际上是指模型需要从当前带噪状态中去除的噪声。
2024-12-26 10:11:50
535
原创 SENet
X经过特征提取得到U,经过压缩操作(U经过一个平均池化压缩成1×1×C)再经过激发操作(再经过两个全连接层,第一个全连接层用于维度压缩,减少计算量。压缩率通常为 r,再经过Relu激活函数,第二个全连接层用于维度恢复,将通道数恢复到 C,再经过使用 Sigmoid 激活函数处理第二个全连接层的输出,确保生成的权重在 [0,1]之间),最后进行将通道权重 s通过逐通道乘法与输入特征图 U 相乘,由于每个通道的特征会根据S进行缩放,使得重要通道的特征被强调,非重要通道的特征被抑制。卷积之后也就是放进内部。
2024-12-18 10:31:58
788
原创 GCNet的简述
变成HW×HW,然后通过softmax进行归一化然后和v进行乘,再通过1×1的卷积,再和原图进行相加也就是特征融合。再借鉴se模块,将se的思路先降维后升维,这样减少计算量,并且加入了ln层更加稳定,形成最后的GCblock.(a)首先resize成C×HW然后通过1×1的卷积生成q,k,v,然后q乘。由于不同位置的q对应热图几乎一致,因此可以共用一张热图,从而简化成(b)Global Context Attention计算量变少从。其中了解self-attention知道他的计算量是。
2024-12-17 21:27:31
465
原创 LSTM (Long Short-Term Memory)
RNN中将序列信息进行运用,但是也存在他的缺点就是随着时间序列的长度增加,产生梯度消失和梯度爆炸问题,因此长期记忆能力有限,所以引出LSTM。(但是对于较短的序列,RNN 可能能够较好地学习到其中的模式和关系。)来决定当前时刻的隐状态和记忆单元如何更新。对于每个时间步,LSTM会基于当前的输入和上一时刻的隐状态以及记忆单元来进行计算。LSTM相当于给RNN模块增加了一个笔记本以达到长期记忆的效果。正如其名它是长时记忆和短时记忆相结合。LSTM主要包含四个门(
2024-12-16 16:29:10
406
原创 RNN的简单理解和代码实现
对于股票预测,不能够只看此刻信息,还需要看前一天的甚至更久之前的信息进行运用,这也是一种时序,至今对时序信息有个大概的了解了。# 随机生成输入序列 (batch_size, seq_len, input_size)其中Xt也就是序列信息{“我”,“想要”,”手机“,”最好是“,”苹果“}的形状为:(batch_size,seq_len,output_size):存储和传递前面时间步的信息,是 RNN 用来捕获序列上下文的重要机制。联系上下文:输入苹果,他会联系到上下文是手机,因此得到苹果手机。
2024-12-16 12:26:53
534
原创 Diffusion Model(扩散模型
Noise Predicter输入一个带noise的图片和代表noise严重程度的数字,输出一个带noise的图,输入数据减去噪得到输出,是因为这种方式得到noise再减去,比得到一张图带noise更加的容易,也就是得到noise比得到图更容易。KL散度是一个非对称的度量,表示的是从一个分布 P到另一个分布 Q的“信息损失”,即如果用 Q来逼近 P,会丧失多少信息。2:这里的第二项是与 θ无关的项,也就是常数项,(因为要求导)优化问题是寻找使目标函数达到最大(或最小)值的 θ参数。
2024-12-15 13:01:34
1086
原创 转置卷积(Transposed Convolution)的简单理解运用
转置卷积(也叫反卷积、上采样卷积)是卷积神经网络中常用的操作,尤其在生成模型(如生成对抗网络、U-Net)中用于增加特征图的空间维度。简单地说,转置卷积是通过插值和卷积操作将较小的输入张量“放大”,生成一个更大的输出张量。
2024-12-14 19:45:24
1069
原创 RGB图片的处理和复原
将张量的维度从 C×H×W 转换回 PIL 图像要求的 H×W×C 格式,并将像素值从 [0, 1] 范围转换回 [0, 255] 范围,且转换为无符号8位整数类型。2.将图像的像素值从 [0, 255] 范围归一化到 [0.0, 1.0] 范围。# 首先,如果之前增加了批量维度(维度为1的那个维度),先去掉这个维度。张量形状:torch.Size([1, 3, 640, 515])1.将输入数据(H x W x C)变为(C x H x W)因为处理进行了这些操作所以逆向转变。
2024-12-14 18:35:12
442
原创 低级特征图和高级特征图的信息
包含边缘(物体轮廓、区域边界)、颜色(颜色区域分布)、纹理(物体表面质地、图案)这些基础的局部信息。包含物体类别、形状和结构(整体形状、部分关系)以及语义关系(物体间空间和功能关系)等抽象的、整体的语义信息。语义信息可以理解为:当模型在深层的特征图中所呈现的注意力点(高亮、激活区域)正是模型用来判断“这是一只猫”的内部证据。
2024-12-12 15:31:33
1622
原创 torch.nn.Upsample上采样
类)主要用于对输入数据(通常是张量形式的图像或特征图)进行上采样操作,上采样后的张量形状: torch.Size([1, 1, 4, 4])原始张量形状: torch.Size([1, 1, 2, 2])输出:scale_factor=2。interpolate类似。在 PyTorch 中,函数(实际上更准确地说是。
2024-12-12 11:57:49
391
原创 interpolate函数
在深度学习中,特别是在处理图像相关的任务时,经常需要改变特征图的尺寸,以匹配不同模块之间的输入输出要求,或者恢复到合适的分辨率用于后续的可视化、计算损失等操作。上采样后的张量形状: torch.Size([1, 1, 4, 4])上采样后的张量形状: torch.Size([1, 1, 8, 8])原始张量形状: torch.Size([1, 1, 2, 2])原始张量形状: torch.Size([1, 1, 2, 2])适用于大多数需要调整特征图尺寸的任务,如语义分割、特征图融合等。
2024-12-12 11:35:18
1268
原创 UNet网络框架
逐步融合高分辨率和低分辨率特征,生成与输入尺寸相同的输出,用于像素级任务(如语义分割)。可以看作是压缩图像的核心特征,逐层减少分辨率,但提取更抽象的特征。作用:由于边界像素往往难以分割,通过加权方式让模型更加关注这些关键区域,从而提高边界分割的准确性。1.conv 3x3,ReLu:卷积层,卷积核大小是3x3,添加bn层,然后经过ReLu激活。1.conv 3x3,ReLu:卷积层,卷积核大小是3x3,然后经过ReLu激活。:对于蓝色边界外的缺失数据,采用镜像来填充,确保模型输入完整。
2024-12-10 15:37:02
1055
原创 Vision Transformer(vit)的主干
它在模型中起到了类似于 CNN 中全局池化 (Global Pooling) 的作用,负责从所有 patch 的信息中提取一个全局表示。这个 token 的输出向量被用作分类任务的特征输入,之后会被送入分类头 (classifier head) 进行最终的类别预测。这个向量是用于分类任务的主要特征表示。#vit中self.dist_token is None所以模型只有分类标记 (class token)。#分类标记如果有将cls_token加入,因为dist_token为none,所以在维度1上拼接。
2024-11-29 19:14:39
1380
原创 Vision Transformer(vit)的Encoder层结构
计算 MLP 隐藏层的维度,它等于输入维度乘以 mlp_ratio。mlp有一个隐藏层一个输出层隐藏层扩大mlp_ratio输出层恢复。
2024-11-29 16:50:51
294
原创 Vision Transformer(vit)的Multi-Head Self-Attention(多头注意力机制)结构
接下来,将上一步得到的矩阵结果除以一个缩放因子,通常是Key矩阵维度(d_k)的平方根。这些头的输出会被拼接(Concat)在一起。这个操作的目的是将注意力权重应用到Value上,得到加权的Value,即最终的注意力输出。: 最后,拼接后的结果会通过另一个线性层,这个线性层将不同头的输出整合成一个单一的表示。操作,将多头的输出重新整理成原始的批次和序列长度维度,从而实现了多头输出的拼接(Concat)。#注意力的缩放因子,通常设置为 head_dim ** -0.5,即每个头的维度的倒数平方根。
2024-11-29 12:17:28
2423
原创 Vision Transformer(vit)的Embedding层结构
是一个重要的参数,它代表嵌入的维度,即每个图像补丁(patch)经过嵌入层后所映射到的向量空间的维度。的默认值被设置为768,这个值来源于一些流行的预训练模型,如BERT,它在自然语言处理任务中取得了很好的效果。#将输入图像的高度和宽度分别除以图像块的高度和宽度,得到图像在高度和宽度方向上划分出的块的。#数量,例如:输入(224,224)除以patch:(16,16),得到数量(14,14)#划分图像的块大小,默认为 16×16。#计算图像总共划分出的块的数量。:在许多ViT模型的实现中,
2024-11-28 19:59:09
686
原创 droppath
torch.rand(shape, dtype=x.dtype, device=x.device)生成随机数(生成均值为0,标准差为1的正态# 分布随机数)形状和shape一致的也就是和x一致,数据类型,设备都和x一致。# 将随机数和keep_prob相加得到随机数(范围[keep_prob,1+keep_prob])#x.div(keep_prob)将输入张量x的所有值除以keep_prob,目的是。# (1,) * (x.ndim - 1) 将shape用1填充和x的形状一样。
2024-11-28 18:17:34
1168
原创 Layer Normalization 与 Batch Normalization 的区别
虽然结果上他们整体都服从均值为0方差为一的分布,但是由于处理的方式的不同,对于不同的情况不同的方式会有更好的效果。假设我们有一个 3 个样本,每个样本有 4 个特征的数据集,表示为一个。
2024-11-28 12:04:00
308
原创 Layer Normalization
Layer Normalization特别适合于循环神经网络(RNN)和长短期记忆网络(LSTM)等序列模型,因为这些模型的输入长度可能会变化,而Layer Normalization不依赖于批次维度。:Layer Normalization通过可学习的缩放和平移参数(γ和β),允许模型在归一化后调整激活值的分布,从而保持模型的表达能力。:由于Layer Normalization减少了激活值的方差,它有助于提高模型训练的稳定性,尤其是在训练初期。
2024-11-28 11:20:12
862
原创 Group Convolution(分组卷积)
虽然conv1和conv2的输出形状相同,但由于分组卷积减少了参数数量和计算量,它可以提高模型的训练速度和效率.# - 参数数量:非分组卷积的参数数量为 8(输入通道)* 6(输出通道)* 1^2(卷积核大小)= #48。# 因此每组的参数数量为 4(输入通道)* 6(输出通道)* 1^2(卷积核大小)= 24。# - 参数数量:由于分组卷积将输入通道分成2组,每组4个输入通道,每组有6个输出通道,# - 计算量:每个输入通道与所有输出通道的卷积核进行计算,因此计算量较大。
2024-11-24 17:42:48
1101
原创 Batch Normalization
由于Batch Normalization在训练和推理时使用不同的统计量(训练时使用小批量统计量,推理时使用全局统计量),它引入了轻微的正则化效果,有助于减少过拟合。:Batch Normalization层引入了额外的可学习参数(γ和β),这为模型提供了更多的灵活性,但也增加了模型的参数数量。:归一化的效果使得网络对于学习率的微小变化更加鲁棒,因此可以使用更高的学习率,进一步加速训练过程。:Batch Normalization的效果依赖于批次的大小,太小的批次可能导致统计估计不准确。
2024-11-22 09:49:07
1039
原创 图像数据增强和标准化
这些操作通常在数据加载阶段被组合使用,以创建一个预处理流水线,对数据集中的每个图像都应用相同的预处理步骤。这样可以确保数据在输入模型之前是标准化和增强过的,有助于提高模型的性能和泛化能力。简单来说这些变体虽然源自同一张原始图像,但由于旋转、翻转、缩放等变换,对于模型来说就像是全新的数据。
2024-11-21 12:16:17
322
原创 元组、列表、集合、字典
无序的键值对集合,键必须是不可变类型,键值对唯一。:可变的有序序列,可以添加、删除或更改元素。:不可变的有序序列,一旦创建不能修改。#无序不可以使用下标索引。实例:key:value。:无序的不重复元素集合。
2024-11-20 16:54:16
334
原创 in关键词
关键字在Python中用于检查一个元素是否存在于列表、元组、字符串、集合、字典的键或字典的值中。它是一个成员资格测试操作符,可以用来快速确定某个值是否属于某个集合。,或者在处理列表和字符串时检查特定元素是否存在。简单来说就是判断元素是否在列表、字典等。输出:可以发现字典key可以判断。可以避免在访问字典时出现。结合使用,可以检查元素是否。字典value不可以判断。
2024-11-20 16:31:44
205
原创 torch.argmax()
是 PyTorch 中的一个函数,它用于返回给定张量中最大值的索引。这个函数通常用于多分类问题中,用来找出模型预测最可能的类别。简单来说就是返回给定张量中最大值的索引。预测的花的名称: 月季。
2024-11-18 18:03:03
277
原创 squeeze()
函数是 PyTorch 中的一个函数,用于从张量(Tensor)中去除所有长度为 1 的维度。这在处理神经网络模型的输出时非常有用,因为模型的输出可能包含一些不必要的单一维度,例如在批处理大小为 1 的情况下,输出可能会有一个额外的批次维度。简单来说就是从张量(Tensor)中去除所有长度为 1 的维度。#y:不指定维度就去除所有长度为 1 的维度。#z:指定维度长度不为1则无效。#v:指定维度长度为1生效。
2024-11-18 17:48:57
386
原创 .train()和.eval()区别
然而,如果我们简单地将一部分神经元的输出设置为0,那么网络的输出规模(即输出向量的总和)会减小,这会影响网络的学习过程,因为梯度下降算法依赖于输出和目标之间的差异来更新权重。Dropout层还有一个行为,那就是在训练模式下,对于那些没有被置零的元素,它们的值会被乘以一个缩放因子,以保持期望的输出值不变。这意味着在训练模式下,只有50%的神经元输出会被保留,而保留的输出值会被乘以2,以保持输出的期望值与没有Dropout时相同。在评估模式下,网络的参数不会更新,这有助于在评估模型性能时获得更准确的结果。
2024-11-17 16:15:30
1387
原创 with函数
语句通常与上下文管理器(context managers)一起使用,它们实现了特定的资源管理协议,确保代码块执行前后能够正确地管理资源,比如文件操作、锁的获取和释放等。语句用于封装一个代码块的执行,这个代码块中的操作需要一些前置和后置处理。输出:明显with更加简介。
2024-11-17 15:06:01
146
原创 assert函数
通常用于调试阶段,确保代码中的某些条件必须满足,否则就中断程序的执行。是一个内置的关键字,用于断言某个条件是真的。如果条件为真,则程序继续执行;如果条件为假,则程序抛出一个。assert 条件, 错误信息。异常,程序中止,并且不输出2。
2024-11-16 20:42:35
236
原创 torch.flatten()
函数可以用来将多维张量(tensor)展平成一维张量。这在准备数据输入到神经网络时非常常见,因为很多神经网络层(如全连接层)期望输入是一维的。# 参数start_dim=1表示从第1维开始展平,end_dim=2表示展平到第二维结束。简单理解就是将张量合并到一个维度里.# 从第1维开始之后全部展平。在PyTorch中,
2024-11-16 18:43:11
300
原创 nn.Dropout()
二中将nn.Dropout()放在连接层前发现经过全连接层之后特征(数值)不为零,但是全连接层的输入数值一半为零。总结:放在前后的选择会带来不同的结果,将Dropout放在全连接层之后,激活函数之前是更常见的做法。总的来说就是经过dropout层就把数据按照丢弃率p进行丢弃,然后再进行下一步操作。一中将nn.Dropout()放在连接层后发现经过全连接层之后特征(数值)一半为零。层的作用是在训练过程中随机丢弃(置零)输入的一部分,以防止过拟合。由于每个元素的丢弃率为p,因此总体接近丢弃率为p。
2024-11-16 18:15:07
3080
原创 Sequential()
Sequential 是一个序列容器,用于搭建神经网络的模块,这些模块会按照被传入构造器的顺序添加到容器中。它允许将整个容器视为单个模块,使得模型的前向传播时调用。方法时,输入数据会被依次传入 Sequential 包含的每个网络模块中,直到最后一个模块输出结果。#由于第三层是输入特征为3,输出特征为2的全连接层所以softmax输出的概率只有两个数。#此为整个内容打包成一个模块输出为softmax函数处理的概率分布。#第一层:输入特征为5,输出特征为3的全连接层。#此为只使用单独整个内容的第一层。
2024-11-16 17:08:29
222
原创 enumerate()
它用于在迭代过程中为每个元素添加一个计数器(即索引),并返回一个枚举对象。输出:可以清晰看出将列表所有元素枚举,并且由自己设置的数开始计数。简单理解类似枚举,并由自己决定从数字几开始计数。
2024-11-16 16:35:58
116
原创 unsqueeze()
官方解释:unsqueeze(input, dim) -> Tensor。输出:此处1:2:3:4:为自己标记方便理解。简单理解就是在指定维度上增加维度。
2024-11-16 12:19:09
315
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人