自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 语义分割算法模型评价指标

指所有被正确分类的像素所占比例表示被标注为类i,但被预测为类j的像素数量(总像素),表示预测正确的像素数量。

2025-07-28 17:17:39 238

原创 VIT速览

当我们取到一张图片,我们会把它划分为一个个patch,如上图把一张图片划分为了9个patch,然后通过一个embedding把他们转换成一个个token,每个patch对应一个token,然后在输入到transformer encoder之前还要经过一个class token,带有分类信息,然后加上位置信息如图123456789。Transformer Encoder由右图所示的部分组成,一共L个,然后再输出到MLP Head,然后做一个分类。

2025-07-19 21:25:24 225

原创 FCN转置卷积/反卷积(2)

转置卷积在语义分割或者对抗神经网络中比较常见,其主要作用就是做上采样。--转置卷积不是卷积的逆运算--转置卷积也是卷积运算的一种--转置卷积也可以被称为反卷积同时在深度学习中上采样的方法也很多:最近邻插值、双线性插值。

2025-07-18 15:38:24 204

原创 FCN语义分割笔记(1)

为图像中的每一个像素赋予一个类别标签,语义分割提供更精细、像素级别的理解。比如有一个图片,图片里有一个西瓜和勺子,经过语义分割模型,输出一个结果,如果原来的图片是512*512,那么理论上来说要对应这么多个像素并且背景也算一个类别,每个像素掩码+类别信息。

2025-07-16 15:09:07 175

原创 深度学习常见名词解释、评价指标

比如机器学习算法对训练数据中的噪声、离群点不敏感,或者在不同分布的数据集上表现稳定。模型在含有错误标签或噪声特征的数据上训练或预测时,性能下降不大。模型不易被精心设计的微小扰动(对抗样本)欺骗而做出错误预测。模型在训练数据分布以外的数据上依然有较好的表现。

2025-07-11 14:18:57 797

原创 图像分割(2)u-net代码实战——基于视网膜分割

整体是一个U型的结构,左边是特征提取层,第一个是做了一个两层的卷积,蓝色箭头就是做了一个3*3的卷积,图中的图像大小会变小,但是本文代码会加入padding,避免图像大小的变化;两层卷积之后进行一个下采样,这里使用最大值池化,每次大小减小一倍;到了最下面,通过卷积变成1024的通道数;到右边进行上采样,注意,这里只取1024通道里面的一半,然后和上一层中的512进行拼接,图中灰色的箭头是裁剪,但是经过padding之后就不需要此步骤。

2025-05-19 18:40:00 401

原创 图像分割(1)U-net

虽然说是几年前的产品,但是现在还在用,因为深度学习很多时候越是简单的网络用起来效果越好,而且一般是目标比较小的时候产生的分割问题。u-net的优势就是网络结构简单,适合小目标分割,所以一直用到现在,在此基础上进行升级。概述就是编码解码过程,如上图所示,我们可以把每一步当做一层,比如这样:现在比如有一张图片的数据,首先使用卷积层提取特征,把输入数据x到网络中,走几个卷积层,然后越来越扁越来越矮,左边的一半就是编码。

2025-05-18 20:34:32 453

原创 图像分割(0)初步认识

看一下损失函数:在这里引入一个权重项,每个像素点的重要程度不一样,会根据比例重新加入一个权重项,使用正例比上负例。在这个公式基础上还要做一些改进:这下关注难易之分,和上面的多少不同,我们不应该把每个像素点同等看待,比如轮廓上的像素点就难以区分,这样难度就更高,这里在之前的公式上加上γ,一般是2。上图0.4改成0.5。

2025-05-16 17:53:14 243

原创 深度可分离卷积实战(2)模型定义代码

自己命名一个depthwise,进行两步卷积:第一步卷积因为通道数是不变的,所以输入和输出通道这里都是in_channels,后面需要加一个groups=in_channels,也就是说这个卷积里面是支持把他们分别进行做的,把通道分别运算;下一步就是做pointwise。然后是搭建模型,首先第一层使用卷积,后面再用深度可分离卷积。因为如果第一层也是深度可分离卷积,效果不太好。每两次进行一次翻倍,效果会好一点。

2025-05-14 15:05:48 244

原创 深度可分离卷积实战(1)原理讲解

本文基于10-monkeys数据集进行分类实战。

2025-05-12 15:00:15 395

原创 卷积神经网络实战(4)代码详解

"""一个用于图像分类的卷积神经网络(CNN)模型""""""初始化CNN模型结构Args:activation: 激活函数类型,可选"relu"或"selu""""# 设置激活函数# 卷积层定义# 输入形状: (batch_size, 1, 28, 28)self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1) # 保持空间维度不变。

2025-05-09 13:24:11 1211

原创 深度可分离卷积(0)

那么如何减少参数量,再次说一下视野域,不同的视野域提取的图像特征尺度不同, 举个例子,现在有1*5*5的和2*3*3的卷积计算,图像为5*5,那么对于前者来说,只需要一次计算,计算后得到的像素点就包含全部信息,而对于后者来说,要经过两次计算,所以1*5*5和2*3*3的视野域是一样的(假设没有padding)。深度可分离卷积结构,把三个块的图替换为6个块的图,就完成了深度可分离的卷积神经网络。那么为什么要使用奇数尺寸的卷积核呢?

2025-05-06 17:52:30 339

原创 卷积神经网络实战(3)

模型中init_weights的作用是初始化模型的可训练参数。对于初始化权重,使用了Xavier均匀分布初始化,据输入和输出的维度动态调整权重的范围,使得前向传播时输出的方差保持一致,反向传播时梯度的方差也保持一致。继续说上一次模型定义,额外说一下就是padding='same'可以让它自动计算需要几圈padding。当步长为2的时候,same无法使用。统一所有层的初始化策略(例如本代码中强制使用 Xavier)。显式控制初始化过程,避免框架默认行为的变化。时,Xavier 更合适)。下一节放出全部代码。

2025-05-06 16:50:12 392

原创 卷积神经网络实战(2)

一开始conv1,第一层卷积层,去运算的时候,以前全连接的时候直接展平,现在是三维的,通道数是1(黑白照片),卷积的时候卷积核也是(1,3,3),但现在卷积核的尺寸实际上是立方体,虽然写的是2d,这是接口的这么一个设计,之所以是2d是因为在两个维度上进行移动(上下左右),不像以前的全连接是一维的必须展平。nn.MaxPool2d(2,2),前面一个2代表池化核大小是2*2,后面的2代表步长。池化一次把图像尺寸减半。对于第二层卷积层,卷积核是(32,3,3),这层的输入和输出的大小一样,作用是提取高层特征。

2025-05-04 16:55:47 589

原创 卷积神经网络实战(1)

输入通道数,图片是灰度图,所以是1,图片是彩色图,就是3,输出通道数,就是卷积核的个数(32,1,28,28)#输入x(32,1,28,28) 输出x(32,32,28,28)#输入x(32,32,28,28) 输出x(32,32,28,28)self.pool = nn.MaxPool2d(2, 2) #池化不能够改变通道数,池化核大小为2(2*2),步长为2 (28-2)//2+1=14self.fc2 = nn.Linear(128, 10) #输出尺寸(32,10)

2025-04-27 02:10:54 536

原创 卷积神经网络原理

比如图像大小1000*1000,那么输入层神经元的数目就是10的6次方,全连接层的参数就是10的12次方,一层就是1万亿个参数。

2025-04-23 14:32:57 317

原创 卷积的理解

卷积是数学中对两个函数进行的一种积分变换,公式如下:若为离散:核心思想是通过滑动加权求和的方式,将一个函数g的形态叠加到另一个函数f上。先从离散的情况入手:这个过程就称为卷积,中间每一个乘积的自变量加起来都是30。不管x+y等于多少,P1和P2总是交叉着相乘,这个过程可以通过旋转上面一行简化为下图所示:再变成下图:这下再进行卷积则只需要错位即可。

2025-04-18 02:10:45 285

原创 GRU传播

自己总结了一下就是,encoder第一层GRU的第一个时间步的输入,可以自定义一个全0向量作为一个输入,另一个输入是词向量,然后下一个时间步的输入就是上一个时间步的隐藏状态加这个时间步的输入,不同层之间是垂直传递的,就比如第一层某个时间步的输入,是词向量加上这层前一个时间步的隐藏状态,第二层某个时间步的输入,就是第一层同时间步的隐藏状态加这层上一个时间步的隐藏状态。

2025-03-28 16:34:47 120

原创 Transformer代码实战

位置编码self.hidden_size = config["d_model"] # 词向量维度# layers,设置padding_idx可以让pad的词向量全为0),# 位置编码,权重通过get_positional_encoding函数计算得到self.pos_embedding.weight.requires_grad_(False) # 不更新位置编码的权重self.dropout = nn.Dropout(dropout_rate) # 随机失活层# 计算位置信息。

2025-03-27 02:32:53 872

原创 Transformer原理

相对于seq2seq就是不使用循环RNN,训练的时候可以并行训练,这个时候如果把句子加的很长,数据集用的很大也可以。Transformei是一个N近N出的结构,每个Transformer单元相当于一层的RNN,接收一整个句子所有词作为输入,然对每一个词都做输出。Transformer任意两个词之间的操作距离都是1。如果设计纯粹语义关系的编码,数字化之后的数值要能体现语义关系。就比方说现在有学生和书和大象,那么可以假设学生和书这两个语义关系的向量在空间中的距离更近,而与大象更远。

2025-03-19 10:06:02 761

原创 BLEU评估指标

用于评估模型生成的句子和实际句子差异的指标,取值在[0,1],匹配度高就距离1近,反之距离0近。这个指标计算代价小,容易理解,与语言无关,与人类评价结果高度相关。BLEU主要基于(连续的n个词)的精确率,并结合**短句惩罚(Brevity Penalty, BP)**来调整长度差异的影响。公式:BP为惩罚系数。

2025-03-13 22:17:25 625

原创 seq2seq推理模块设计

这里先解释call方法,首先预处理句子,然后编码输入,把文本转化为tokenID,左端填充Padding,添加BOS和EOS标记。然后是Translator类,初始化翻译器,把模式变成eval模式,绑定源语言和目标语言的分词器。这段代码实现了一个基于序列到序列(Sequence-to-Sequence)模型的。然后执行推理生成语言的TokenID(preds)和注意力分数(scores)。首先加载模型,从文件best.ckpt加载预训练模型的参数。然后是解码输出把TokenID变为文本,最后可视化注意力。

2025-03-13 15:50:56 209

原创 seq2seq代码实战详解

用于。

2025-03-13 02:03:14 1044

原创 深度学习GRU模型原理

是一种改进的循环神经网络(RNN),专为解决传统RNN的(梯度消失/爆炸)而设计。其核心是通过动态控制信息的流动。

2025-03-12 11:36:37 656

原创 Bahdanau注意力方式公式原理详解

Bahdanau注意力(又称)由Dzmitry Bahdanau等人在2015年提出,用于改进传统编码器-解码器模型在长序列任务(如机器翻译)中的性能。,使解码器能自适应地关注输入的关键部分。

2025-03-12 00:56:25 1114

原创 深度学习subword分词BPE

BPE:这是一种流行分词算法,可以有效的平衡词汇表大小和步数,分词采用共现性。步骤:1.准备足够大的训练语料2.确定期望的subword词表大小(超参)3.将单词拆分为字符序列并在末尾添加后缀"</w>",这样就可以统计单词频率。比如一开始有一个l字母,现在编程l</w>5,就说明出现了五次。停止符</w>的意义在于表示subword是词后缀。每次合并后词表可能出现三种变化:+1:表明加入合并后的新字词,同时原来在的2个子词还保留;0:如果一个字词不是单独出现的,就被消解;

2025-03-11 21:57:40 1066

原创 深度学习LSTM公式原理

普通的RNN信息不能长久传播,因为结尾较远的信息被稀释的比较厉害,所以引入LSTM,LSTM 是一种特殊的循环神经网络(RNN),专门设计用于解决传统RNN在处理与RNN相比,LSTM在计算隐藏层时,会包含当前时刻的日记信息。LSTM通过,显式控制信息的保留与遗忘,从而解决长期依赖问题。门机制是通过学习对原权重进行更新。遗忘门:决定细胞状态中哪些信息需要被丢弃(通过Sigmoid函数输出0~1之间的值)。传入门:要不要把重要的传入,决定当前输入信息中哪些需要更新到细胞状态。

2025-03-10 21:20:04 1408

原创 深度学习分词器char-level实战详解

batch_first=True,输入的数据格式是(batch_size, seq_len, embedding_dim)#这里和02的差异是没有只拿最后一个输出,而是把所有的输出都拿出来了return x, hidden #x的shape是(batch_size, seq_len, vocab_size)print("{:=^80}".format(" 一层单向 RNN "))因为字典太小,所以embedding_dim要放大。

2025-03-10 17:36:19 566

原创 深度学习双向RNN

一个隐藏层其实是有两个,一个是向前的一个是向后的。向后的就是说后面的输入更新隐藏状态后是给前面用的,这样两个隐藏层合在一起。在实现上只需要把序列反过来训练就可以了。最后两个东西合并起来进入输出层。双向RNN通过反向更新的隐藏层来利用方向时间信息。那么双向神经网络如何做推理呢?答案是推理只能用单向,双向不适合做推理。双向主要的作用是对一个句子做特征提取,理解场景。

2025-03-10 11:54:31 543

原创 深度学习RNN文本分类代码详细解读(直接可以跑)

self.rnn = nn.RNN(embedding_dim, hidden_dim, num_layers=num_layers, batch_first=True, bidirectional=bidirectional) #bidirectional是双向的#把final_hidden去除轴size为1的,和x进行比较,里边元素是否相等# 取最后一个时间步的输出 (这也是为什么要设置padding_first=True的原因)return x。

2025-03-10 02:24:39 1011

原创 为什么文本训练需要循环神经网络

self.rnn = nn.RNN(embedding_dim, hidden_dim, num_layers=num_layers, batch_first=True, bidirectional=bidirectional) #bidirectional是双向的#把final_hidden去除轴size为1的,和x进行比较,里边元素是否相等# 取最后一个时间步的输出 (这也是为什么要设置padding_first=True的原因)return x。

2025-03-09 18:31:00 170

原创 文本Embedding

One-hot编码:模型没办法知道不同词之间的距离,比如男人和绅士之间的距离。所以为了让模型知道词之间的距离,Embedding:要把词变为一个向量,让我们知道词之间是不是近义词。

2025-03-08 14:49:46 498

原创 Torch自定义求导

【代码】Torch自定义求导。

2025-03-07 20:54:01 222

原创 深度学习——Tensor

1.常数:scaler:0阶张量——标量2.向量:vector:1阶张量3.矩阵:matrix:2阶张量4.三阶张量。

2025-03-07 17:25:33 412

原创 深度学习网格搜索实战

还是使用房价数据集进行实战。因为模型简单,使用超参数搜索的时候速度快。

2025-03-07 15:06:09 446

原创 深度学习Dropout

Dropout是为了解决过拟合,当层数加深,就有可能过拟合,这个时候模型太复杂就会过拟合,那么可以让模型变得简单一点,所以就可以随机挑一些神经元,让某些神经元的输出是0,只保留部分神经元的输出给下一层,这个过程是随机的。但是在推理的时候这些神经元相当于变得透明,不再随机。丢多少的比例就是超参。

2025-03-07 11:42:01 503

原创 深度学习激活函数

1. Sigmoid当神经元的激活在接近0或1的时候会饱和,也就是说当x继续变大,函数值不会有什么改变,也就是梯度消失。并且Sigmoid函数的输出不是以0为中心的,所以输出的要么都是正数要么都是负数,这将会导致Z字型梯度下降。5.SELU是在ELU函数的基础上提出的改进方法,目的是通过对网络的初始化和激活函数进行约束来解决深层神经网络的梯度消失和梯度爆炸等问题。4.ELU在x<0时具有负指数的特性,可以避免死亡神经元问题,相对于LeakyReLU在负值计算时间更长。

2025-03-07 01:41:02 299

原创 深度学习DNN实战

Sequential容器中写输入层,在下面的add_moudle中可以添加多个隐藏层,更深层次的网络能够学到更多的特征;init_weights改变分布,也是一种调参数的方式self.transforms = transforms # 预处理层,标准化# 多加几层nn.ReLU(),# 加19层# 输出层# 初始化权重"""使用 xavier 均匀分布来初始化全连接层的权重 W"""# print('''初始化权重''')# print(m)

2025-03-06 23:16:47 358

原创 深度学习反向传播

梯度其实就是导数,除了用符号求导也可以用近似求导:然后更新w=w-学习率*导数反向传播就是链式求导向前计算:对每个节点求偏导在前向传播的时候,进行一次前向计算的时候就可以把每一条线的偏导数都知道前向传播和反向传播是交替进行的。

2025-03-06 22:12:43 402

原创 构建自己的数据集

需要将标签数据转换为张量,并调整形状以适应模型训练的要求,.float的作用在于如果原始标签是整数,那么需要显式转换为浮点数。原本y是那么多行,转换成张量后,就变成一维的了,一行多列。然后是DataLoader。验证和测试就不随机了。

2025-03-06 18:49:40 134

空空如也

空空如也

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

TA关注的人

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