自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (1)
  • 收藏
  • 关注

原创 N10 - NLP中的注意力机制

在没有本节学习之前,我一直以为注意力机制就是Transformer中使用的自注意力机制。通过注意力机制的过程学习,我才发现,自注意力机制只是注意力机制中的一种,并且Transformer这种也只是自注意力机制的一种实现形式。宏观上来看,自注意力机制可以用在更广泛的场景中,比如计算一下特征图每层之间的注意力分数,叫做通道注意力机制。

2024-08-29 13:51:02 1165

原创 N9 - seq2seq翻译实战使用Pytorch实现

这样做的好处是,解码器可以直接获得正确的输入信息,加快训练速度,并且在训练早期提供更准确的梯度信号,帮助解码器更好地学习。直观上打破了我对模型的一些印象,由于RNN模型是迭代的,并且Encoder的原始输入是数字化后的文本,Decoder的原始输入是一个语句开始标记,所以将它们直接分开实现起来更容易,逻辑上更清晰。在训练过程中,Teacher Forcing将目标序列的真实值作为解码器的输入,而不是使用解码器自己的预测结果。如何将数据转换为模型能够处理的格式,是把模型应用到实际任务中最重要的一个部分。

2024-08-23 15:30:19 1057

原创 N8 - 使用Word2Vec进行文本分类

通过对新增的两个章节的回顾和本章的任务的训练,让我印象最深刻的就是这个函数的使用。通过它把一个简单的yield函数变成了数据集,具体的dataset不需要自己来实现,这样做的好处是非常快捷。但是这种方式应该仅限于数据量不大的情况下使用,如果数据量太大,它会全部加载到内存中,这时候就应该使用自定义的数据集,通过索引来进行取数据,具体的逻辑更加灵活,不用在没有训练的时候就把数据加载到内存里。

2024-08-16 15:57:51 1527

原创 N5 - 使用Gensim库训练word2vec模型

通过本次实验,我发现传统的机器学习与深度学习任务比起来,节约的计算机性能不是一点半点。因此在一个任务使用传统的机器学习方法就可以取得不错的效果时,其实根本就没有必要使用深度学习模型。通过word2vec模型的部分应用效果,感觉效果比深度学习模型差别很大,有可能是因为停用词只去除了标点符号,但是中文有很多常见的停用词,如“的”,“了”这种词汇,但是有些动词在句子中是有意义的,在相似问题中却是没什么意义,就像上面搜索与沙瑞金相似度较高的词汇,竟然出现了“做”, “像”这种动词,显然是不太合理的。

2024-08-05 18:01:35 574

原创 N4 - Pytorch实现中文文本分类

通过测试,发现这个模型的效果还是不错的。大部分的句子可以给出正确的分类。和上节相比,中文数据集的文本分类任务和英文数据集的文本分类主要差异在tokenizer(分词器)上。英文的分词非常简单,英文的词之间天然有间隔,所以可以直接使用标点和空格来分割。中文就不太一样,中文需要一个好的断句工具才行,jieba库就是这么一个工具。在大部分的中文自然语言处理任务中,都可以看到它的身影。

2024-08-02 17:55:05 1074 2

原创 书生大模型实战营闯关 - 8GB显存玩转书生大模型demo

创建一个使用10%GPU算力,cuda12.2系统的开发机,并启动。由于开发机的IO性能较差,开发机共享盘中已经创建好了本次实验所需要的conda环境。

2024-07-31 15:21:46 1291 1

原创 N3 - Pytorch文本分类入门

文本分类任务,关键的是前面对文本的处理,合并,嵌入,最后的分类反而非常简直,直接使用了一层全连接层就可以达到不错的效果了。在复现的过程中,由于使用的库版本不一致导致torchtext库部分代码无法正常运行,卡了好久,后面搜索了一些之前打卡的同学的博客,才找到解决方案。复现模型时尽量不要使用最新的版本,而是使用原来的版本,先运行起来,再改动。

2024-07-25 14:35:42 1085

原创 书生大模型实战营闯关2 - Python基础知识

打开VSCode和开发机,在页面的左侧找到远程选项卡,填写服务器信息。接下来的使用过程就和在自己电脑上调试一模一样了。在插件中选择安装python的插件到远程机器。创建一个python文件,然后把代码复制进去。等待VSCode连接并自动配置远程开发环境。左下角展示主机名就说明已经连接成功了。

2024-07-21 17:26:40 336

原创 N2 - Embeddingbag与Embedding

在没有进行代码实践以前,我一直以为词嵌入是基于输入的,不论是句子还是词汇,输出的都是固定维度的向量。也就是EmbeddingBag,而真正的Embedding是只针对词来做处理的。还有一个值得注意的点是,EmbeddingBag层计算时要求输入的offsets其实是每个句子的起始索引。这里面包含了两个知识点,一个是,我们使用torch.cat实际将两个句子无缝合并成了一个向量。然后使用offsets来提供每个句子的起始索引。因此登假设offsets中有N个索引,最终的输出结果就是(N,32)维度的向量。

2024-07-18 13:20:10 764

原创 书生大模型实战营闯关1 - Linux基础知识

2024.7.10日开始,我参加了由上海人工智能创新中心举行的,第三期书生大模型实战营,本文为学习过程的记录。如有理解错误的地方,欢迎指正。

2024-07-16 10:07:37 1228

原创 N1 - OneHot编码

通过本节的学习学会了如何将文本转换为one-hot编码,但是也发现在中文自然语言处理中,使用one-hot编码是有局限性的,通过使用结巴分词来进行分词处理,然后再转换为one-hot编码,可以获得比较简短的词向量。这种编码方式不仅能够避免不必要的关系假设,还能够提供清晰的输入表示,有助于模型的学习和泛化。one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,剩下的全部为0。这样,每个类别之间是相互独立的,不存在顺序或者距离关系。最早期的文本数字化方法,就是将文本转换为字典序列。

2024-07-13 08:19:34 762

原创 G9 - ACGAN理论与实战

通过对模型的复现,发现我之前对判别器的理解有偏差,如果在判别器的输入中插入分类信息,等于是将答案直接给了判别器,生成的结果反而不会太好。还有一个和我预想的不一样的地方,在生成器中,将标签嵌入到特征向量使用了矩阵乘法,而没有直接使用concatenate操作。

2024-07-05 21:19:00 747 1

原创 G8 - ACGAN

通过对模型图的分析我们可以发现,它是在SGAN的基础上,引入了CGAN的思想,这也说明我上一期中对SGAN的一些理解是错误的,SGAN实际上只是让生成的图像更具有不同分类的差异,效果更好,但是没有对应的控制生成的能力。在判别器中也是如此,将标签传入,通过嵌入后合并到特征向量中,然后传入到判别网络。想要给SGAN增加控制生成的能力,我们就需要像CGAN一样引入控制量C。需要注意的是生成器中的输入z的维度和判别器中的潜在维度是不一样的。由于下次打卡才是真正的代码,这节就先把思路写一下,验证下周再发。

2024-06-28 21:08:32 602

原创 G7 - Semi-Supervised GAN 理论与实战

生成器# 创建一个标签嵌入层,用于将条件标签映射到潜在空间# 初始化图像尺寸, 用于上采样之前# 第一个全连接层,将随机噪声映射到合适的维度# 生成器的卷积块nn.Tanh(),return img# 判别器,一个分类网络"""返回每个鉴别器块的层"""if bn:# 鉴别器的卷积块# 下采样图像的高度和宽度# 输出层SGAN对于GAN的改进,更像是一个拥有着部分共同权重的一组小模型,可以让每个分类的图像生成的更加精确,避免生成的图像同时拥有着几种手势的特点,有点不伦不类。

2024-06-21 16:43:32 828

原创 G6 - CycleGAN实战

通过对CycleGAN的学习,我理解CycleGAN其实是训练了较前作来说是完整的GAN模型,G模型用来做从通过A生成B,F模型用来做通过B生成A。如果只是分别看GAN的损失,的确是两个不相关的模型,但是作者通过Cycle损失和Identity损失,将两个模型联合在一起进行训练,训练好的生成器G和生成器F就可以实现相反的两种转换。通过前面的视频也可以看出,不同的帧之间,不一定具有一致性, 所以将一个图像模型直接转换为视频模型,有一个需要考虑的点就是前后帧的一致性问题,这应该是视频生成模型的共性问题。

2024-06-14 21:57:51 756

原创 G5 - Pix2Pix理论与实战

通过对Pix2Pix模型的学习,最让我印象深刻的特点是它把判别器由CGAN那种统一压缩完直接预测的逻辑转换成了分成一个Patch,这样提升了模型生成的精度。在了解了这个修改后,我对之前GAN和CGAN产生的斑点很多的生成有了更加深入的理解。应该是由于模型对特征的压缩,导致部分像素失去代表性,产生斑点。还有一个印象深刻的点是完全随机的噪声zzz。

2024-06-07 21:50:16 1110

原创 G4 - 可控手势生成 CGAN

保存训练好的生成器的权重使用生成器加载生成随机分布变量用于生成图像生成指定的标签,并转换成控制向量执行生成操作另外关于警告和matplotlib设置中文字体的方式也是经常会用到的技巧。

2024-05-31 21:33:05 529

原创 G3 - 手势图像生成 CGAN入门

通过本次实验的学习,我学习到了如何控制GAN的生成,通过将标签通过嵌入生成嵌入向量,然后合并到随机生成的潜在向量中传入生成器,就可以生成出与标签对应的结果还有一个在上个实验中我感觉不太对,但是没有找到原因的地方:在判别器反向传播的时候使用detach()断开和生成器的连接,防止互相影响。上次实验是分别对判别器的real_loss和fake_loss进行反向传播,此次实验是将real_loss和fake_loss相加后,统一进行的反向传播。

2024-05-17 15:49:14 778

原创 G2 - 人脸图像生成(DCGAN)

-1:# 类名中有Conv,卷积或反卷积层,使用均值为0标准差为0.02的正态分布来初始化= -1:# 类名中有BatchNorm 批归一化层,使用均值为1,标准差为0.02的正态分布初始化权重# 偏置初始化为0# 转置卷积# 批归一化,用于加速收敛和稳定训练过程# 激活函数# 第一个单元处理完,模型输出(ngf*8)x4x4# 第二个单元处理完,模型输出(ngf*4)x8x8# 第三个单元处理完,模型输出(ngf*2)*16*16。

2024-05-10 21:37:42 1114

原创 G1 - 生成对抗网络(GAN)

GAN是一个非常有趣的网络,它使用了一个非常简直的二分类器来做判别器,然后使用一个输入与输出相同的模型来做生成器。生成器会学习到给定的数据中的分布情况,从而模拟出与给定数据同样的分布,作为生成器的输出。经过50个轮次的运行,图像竟然真的可以开始输出一些和原始图像非常相似的结果,让我感觉非常的不可思议。从计算机其它领域获得一些概念,然后融入到人工智能中,有时候会有非常不错的结果。

2024-05-03 23:28:52 1004

原创 TR6 - Transformer实战 单词预测

实验做的还是比较简单的,Transformer模型中的编码器直接使用的是pytorch框架预定义好的模块,但是对于理解整个模型的训练过程还是非常有帮助的。在实验的过程中,发现torchtext模块也已经不在维护了,和计算机视觉不同,自然语言处理的模型的输入格式灵活多变,经常需要自己写代码调整,比如上面的data_process函数。

2024-04-26 16:08:14 2461

原创 TR5 - Transformer的位置编码

在NLP任务中,单词的序列顺序是非常重要的,将单词的顺序重新排列,整个句子的意思可能会发生改变。在RNN循环神经网络中,有着处理序列顺序的内置机制。Transformer通过引入位置编码机制来保存文本中字符的位置信息。位置编码记录了文本中字符的位置信息,它并没有使用单个数字(例如索引值)的形式来记录位置信息。对于长序列,索引的大小可能会变得很大,不利于存储。将索引值规范化到0-1之间,可能会为可变长度序列带来问题(它们的标准化方式不同)。

2024-04-19 14:28:18 990

原创 TR4 - Transformer中的多头注意力机制

多头注意力机制可以说是Transformer中最主要的模块,没有之一。这次我们来仔细分析一下注意力机制与多头注意力机制。通过对多头注意力机制的学习,有一个让我印象深刻的地方就是,它的多头注意力机制不是像其它模块设计思路一样,对同一个输入做了多组运算,而是将输入切分成不同的部分,每部分分别做了多组运算。由于自然语言处理中,一个单词的词向量往往是很长的,所以这种方式比CV的那种堆叠的方式能减少很多计算量,并且在效果方面不会损失太多。

2024-04-12 17:03:02 1062

原创 TR3 - Transformer算法详解

本周在理论上学习了Transformer模型的结构、组成、训练过程。让我印象最深刻的就是Seq2Seq模型不仅有一个输入头,它的编码器是和CV模型共通的,但是编码器也有输入,并且先每个时间步只输出一个单词,这点和RNN一样并没有什么变化。这也制约了NLP任务的训练和推理。另外我没想到它的损失函数竟然和最基础的分类网络一样,用简单的交叉熵损失就可以。

2024-04-05 20:02:29 954

原创 TR2 - Transformer模型的复现

类似于残差的连接在Transformer中也十分常见,还有先缩小再放大的Bottleneck结构。整个Transformer模型的核心处理对特征的维度没有变化,这一点和CV模型完全不同。Transformer的核心是多头自注意机制。

2024-03-29 20:32:56 755

原创 TR1 - Transformer起源与发展

自监督学习(Self-supervised Learning)是一种机器学习方法,其特点在于从数据本身自动生成标签或监督信号,无需人工标注。简单来说就是让机器利用数据本身的结构或特征来进行学习,从而不依赖于外部标签或监督信号。

2024-03-21 18:01:43 1407

原创 J9 - Inception v3算法

通过对InceptionV1和InceptionV3的对比可以发现,InceptionV1的模型结构十分简单,InceptionV3模型的结构就复杂了很多。然而InceptionV3的性能在InceptionV1的基础上略有提升,但不不是非常明显。是并行1xn和nx1的卷积来替换nxn卷积,在精度不变的情况下可以降低很多参数量和计算量。

2024-03-15 12:32:44 1268

原创 J8 - Inception v1算法

通过50次迭代的结果发现,模型在测试集上的准确率已经可以达到90.4%。对比之前的ResNeXt有精度提升。另外,通过对Inception结构的学习,学到了一些模型优化的思路:1. 是并行,将过长的网络,通过一定的策略,修改成并行计算,可以减少网络层数2. 是将NxN的卷积变成1xN->Nx1来减少参数量3. 是在卷积操作前,通过1x1卷积降维。

2024-03-06 14:04:11 787

原创 让人头大的深度学习环境

当前已经有许多的深度学习框架,例如 tensorflow、pytorch、mxnet、paddle等。众所周知,深度学习离不开显卡,对于普通的研究者来说,离不开Nvidia的显卡。光有了硬件还不行,显卡大爷岂是你随随便便就能驱使的,它还需要显卡驱动(Driver)Cuda(Compute Unified Device Architecture)计算库CUDNN(CUDA Deep Neural Network library)深度学习库。

2024-02-27 11:28:56 692

原创 J7 - 对于ResNeXt-50算法的思考

J6周有一段代码如下。

2024-02-23 22:03:55 515

原创 J6 - ResNeXt50模型的实现

从结果上来看,模型的过拟合问题严重,可以发现,参数量大的时候,训练集的正确率会达到很高的高度,但是可能只是因为数据集太小,模型记住了所有的训练集导致的,就像这个模型, 在测试集上的表现并不突出。

2024-02-02 23:26:32 670 1

原创 J5 - DenseNet与SE模块相结合

对比三种模块发现,在最后一层中添加SE模块的效果是最好的。我猜测是因为最后一层DenseBlock的结果就相当于特征提取完成了,按正常的步骤后缀就是进入classifier的全连接层,针对任务进行特征使用。这时候对特征进行SE模块的操作,可以压缩特征表达,把无关的通道的权重减少,有关通道权重加大,得到的特征会有更好的表现力。最后是三个模型的精确度都超过了89%。

2024-01-24 14:50:37 1105

原创 J4 - ResNet与DenseNet结合

虽然大幅度的降低了模型的规模,实际的总参数还是数倍于DenseNet121。然而,模型似乎比DenseNet121的泛化性能好不少,训练和验证的Gap比DenseNet121小很多,甚至有的时候验证集上的表现比训练集还好。直接使用ResNet的ResidualBlock实现DenseNet会让参数量迅速的膨胀。接下来再改进,应该从如何压缩DenseNet的参数量的角度来考虑。

2024-01-19 23:05:34 551

原创 J3-DenseNet实战

包引用全局设备对象数据准备从K同学提供的网盘中下载乳腺癌数据集,解压到data目录下,数据集的结构如下:其中1是乳腺癌,0不是乳腺癌,这个目录结构可以使用torchvision.datasets.ImageFolder直接加载随机打印5个图像的尺寸发现输入并不是224大小的三通道图像,所以我们可以在数据集处理时需要Resize这一步3. 随机打印20个图像然后通过加载文件夹从数据中提取图像不同的分类名称,并转换成文字划分训练集和验证集最后,将数据集划分批次模型构建首先编写De

2024-01-12 22:40:48 1098

原创 J2 - ResNet-50v2实战

可以发现逆置了BN和ReLU之后,模型的收敛速度更快,然后在测试集上的效果也更好。和作者的相比,我的效果提升给加明显。分析原因是作者的模型训练层数较深,提升的是模型的上限,而我的应该还没有收敛。由此可以得出结论逆置的BN和ReLU具有更强的特征提取能力,也有一定的表达能力的提升。

2024-01-05 22:13:05 1144

原创 J1 - ResNet-50实战

一开始使用了0.1这样的大学习率,训练完全无法进行。后来发现loss初始值就非常小,只有1.5左右,于是改用小学习率,模型才train起来。IdentityBlock和ConvBlock中都有1x1卷积压缩特征图后进行实际的特征提取/处理操作然后再通过1x1卷积恢复原体积的特征图,目前对这个缩小后再放大的操作非常迷茫,既然特征的计算已经在低维度进行过了,再基于此放大特征也不可能有新的特征出现,反而会多了很多噪声,是不是这个噪声是必须。

2023-12-29 18:06:45 1124

原创 YOLOv8重要模块解读

yolov8的模块代码解读

2023-12-15 21:24:57 2428

原创 YOLOv8配置文件yolov8.yaml解读

通过对比最上面的scales和上面两个输出,可以发现,卷积核大小被width来控制,模块重复次数由depth来控制,对照可以写下v8l的输出。根据提供的yolov8n yolov8s的模型输出,推测yolov8l的模型输出。这里配置的是模型的head部分,其结构和使用规则与backbone一致。

2023-12-08 19:20:49 5391 4

原创 使用YOLOv8训练自己的数据集

使用脚本split_train_val.py,从标注xml文件中抽取出图像的列表和标签信息,并保存到相应的文件中。通过上面训练结束可以看出,总体上达到了98.7%的准确率,99.7%的召回率,效果还是非常不错的。因为YOLO框架使用的是VOC格式的数据集,因此需要生成一个VOC格式的数据文件。下载数据集zip包,并解压,数据集的地址在原作者博客中有。在项目根目录下创建一个文件data.yaml。以下操作全部在fruit_data目录下。使用脚本voc_label.py。

2023-12-01 21:58:36 756

原创 修改YOLOv5的模型结构第三弹

它的kernelsize是3,stride是2,这是一个会让特征图的尺寸缩小一半的卷积,由于我们删除了它,后面的流程中特征图的尺寸会和原来有所不同,最终导致错误。通过对前面知识的回顾,Concat模块会引用上层的模块的输出,体现在配置文件中,就是会引用数组中的下标,但是我们在数组中删除了两个元素,会使数组原本的索引失效。在head的第一层中,使用了一个1x1的卷积,我们把它修改为kernelsize=3,stride=2的卷积。所有的修改至此就完成了,使用train.py脚本训练一下修改后的模型。

2023-11-24 16:49:11 1596 1

中国移动应用商场 MM 的应用内计费基本机制

中国移动应用商场 MM 的应用内计费基本机制

2014-05-11

空空如也

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

TA关注的人

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