- 博客(52)
- 资源 (4)
- 收藏
- 关注
原创 第T5周:运动鞋品牌识别
● tf.keras.preprocessing.image_dataset_from_directory():是 TensorFlow 的 Keras 模块中的一个函数,用于从目录中创建一个图像数据集(dataset)。initial_learning_rate的参数原来是0.1的,训练出来的数据太差了,就修改为0.001。● min_delta: 在被监测的数据中被认为是提升的最小变化, 例如,小于 min_delta 的绝对变化会被认为没有提升。●decay_rate(衰减率):学习率的衰减率。
2024-09-04 16:31:26
685
原创 第T4周:猴痘病识别
卷积神经网络(CNN)的输入是张量 (Tensor) 形式的 (image_height, image_width, color_channels),包含了图像高度、宽度及颜色信息。2.但是广义上来讲,验证集存在的意义确实参与了一个“人工调参”的过程,我们根据每一个epoch训练之后模型在valid data上的表现来决定是否需要训练进行early stop,或者根据这个过程模型的性能变化来调整模型的超参数,如学习率,batch_size等等。●损失函数(loss):用于衡量模型在训练期间的准确率。
2024-09-03 23:12:35
842
原创 第T3周:天气识别
然而,验证集上的表现(val_loss 和 val_accuracy)是衡量模型泛化能力的关键指标,如果验证集的损失突然增大或准确率下降,可能表明模型开始过拟合。验证集准确率: 验证集的准确率从 76.00% 上升到 86.22%,但在某些 epoch 中,准确率没有明显改善,甚至略有下降(例如,在 Epoch 4 和 Epoch 9)。结论:虽然模型在验证集上的准确率还算不错,但验证损失的增加以及训练和验证准确率之间的差距表明模型存在一定程度的过拟合。从上面的数据来看,模型显示出了一些过拟合的迹象。
2024-09-03 06:07:23
791
原创 第T2周:彩色图片分类
过拟合(Overfitting) 是机器学习模型训练中常见的问题,指的是模型在训练数据上表现得非常好,但在验证或测试数据(未见过的数据)上的表现较差。这意味着模型过于复杂,以至于学习到了训练数据中的噪声或特定模式,而不是数据的通用特征,导致在新数据上泛化能力不足。经过上网查资料和多次训练,将epochs修改为20,结果不如意,甚至比epochs=10的结果更差,过拟合现象更突出,说明模型一定过拟合了。模型复杂度高:模型参数过多,层数过深,或神经元数量过多,导致模型能够记住训练集中的每一个细节和噪声。
2024-09-02 17:34:18
1253
原创 第T1周:实现mnist手写数字识别
不归一化处理时,如果特征值较大时,梯度值也会较大,特征值较小时,梯度值也会较小。在模型反向传播时,梯度值更新与学习率一样,当学习率较小时,梯度值较小会导致更新缓慢,当学习率较大时,梯度值较大会导致模型不易收敛,因此为了使模型训练收敛平稳,对图像进行归一化操作,把不同维度的特征值调整到相近的范围内,就可以采用统一的学习率加速模型训练。通过下面的网络结构我们可以简单理解为,输入一张图片,将会得到一组数,这组代表这张图片上的数字为0~9中每一个数字的几率(并非概率),out数字越大可能性越大,仅此而已。
2024-09-01 23:42:07
698
原创 第TR6周:Transformer 实现文本分类 - Embedding版
●根据自己的理解对代码进行调优,使验证集准确率达到79%这是一个使用PyTorch实现的简单文本分类实战案例。代码基础上,将嵌入方式改为Embedding嵌入。●理解文中代码逻辑并成功运行。需要另外安装jieba分词库。
2024-08-22 16:49:14
380
原创 第TR5周:Transformer实战:文本分类
任务:●理解文中代码逻辑并成功运行●根据自己的理解对代码进行调优,使准确率达到70%1.准备工作1.1.环境安装这是一个使用PyTorch通过Transformer算法实现简单的文本分类实战案例。代码输出1.2.加载数据代码输出代码输出代码输出代码输出2.数据预处理2.1.构建词典需要另外安装jieba分词库,安装语句如下:●cmd命令:pip install jieba代码输出代码输出代码输出代码输出2.2.生成数据批次和迭代器2.3.构建数据集to_map_
2024-08-22 16:18:15
399
原创 第N11周:seq2seq翻译实战-Pytorch复现
当use_teacher_forcing为True时,采用"Teacher Forcing"的策略,即将目标序列中的真实标签作为解码器的下一个输入。这样可以提供更准确的指导信号,帮助解码器更快地学习到正确的输出。在序列生成的任务中,如机器翻译或文本生成,解码器(decoder)的输入通常是由解码器自己生成的预测结果,即前一个时间步的输出。综上所述,通过使用use_teacher_forcing来选择不同的策略,可以在训练解码器时平衡模型的预测能力和稳定性,同时也提供了更灵活的生成模式选择。
2024-08-20 17:48:59
739
原创 第N8周:使用Word2vec实现文本分类
例如,在代码中 zip(texts, labels) 就是将 texts 和 labels 两个列表中对应位置的元素一一打包成元组,返回一个迭代器,每次迭代返回一个元组 (x, y),其中 x 是 texts 中的一个元素,y 是 labels 中对应的一个元素。x_vec 的形状为 (n, 100),其中 n 是 x 中元素的数量。●text_pipeline 函数:接受一个包含多个词的列表 x 作为输入,并返回这些词对应词向量的平均值,即调用了之前定义的 average_vec 函数。
2024-08-18 04:22:54
936
原创 第N7周:调用Gensim库训练Word2Vec模型
拿到了分词后的文件,在一般的NLP处理中,会需要去停用词。因为在默认情况下,open() 函数在 Windows 系统上使用 gbk 编码,而文件可能是使用其他编码(例如 UTF-8)保存的,这导致了 UnicodeDecodeError的问题。如果不确定“in_the_name_of_people.txt”文件的编码,可以尝试以下方法:可以使用 chardet 库来检测文件的编码。当然也可以直接跳过上面的检测文件的代码,直接在open() 函数中显式指定UTF-8的文件编码打开文件。
2024-08-16 22:57:12
373
原创 第N6周:中文文本分类-Pytorch实现
运行下面的代码时,发生了pandas与numpy的版本冲突问题,在网上查了不少资料,看pandas的哪个版本与numpy的哪个版本是相对应的。问题还是无法解决,最后是另外建立一个新的虚拟环境,安装numpy、pandas,运行下面的代码就没有再出现pandas与numpy的版本冲突问题了。之所以没有用新的虚拟环境运行代码,是因为其他模块,如torch、torchtext、portalocker、numpy的版本也是要相对应的,我已经在原虚拟环境安装好了这些模块,不想在新的虚拟环境再折腾安装这些模块了。
2024-08-16 15:16:44
636
原创 第N5周:Pytorch文本分类入门
python版本与要安装的torch、torchdata、torchvision、torchtext、portalocker库的版本是存在关联的,如果版本不对,代码在运行时会发生冲突,发生诸如“OSError: [WinError 127] 找不到指定的程序”这样的问题。还有一个问题,就是安装完torchvision时,可能也会同时自动安装torch,但自动安装的torch有可能不是我们自己想要安装的版本,这时就要把自动安装的torch卸载,等安装完torchaudio,再安装自己想要的torch版本。
2024-08-14 21:34:59
845
原创 第N4周:NLP中的文本嵌入
在PyTorch中,EmbeddingBag的输入是一个 整数张量 和一个 偏移量张量,每个整数都代表着一个词汇的索引,偏移量则表示句子中每个词汇的位置,输出是一个浮点型的张量,每个浮点数都代表着对应句子的词嵌入向量的均值或总和。EmbeddingBag是在Embedding基础上进一步优化的工具,其核心思想是将每个输入序列的嵌入向量进行合并,能够处理可变长度的输入序列,并且减少了计算和存储的开销,并且可以计算句子中所有词汇的词嵌入向量的均值或总和。通俗的讲就是,一种把文本转为数值输入到计算机中的方法。
2024-08-14 01:17:53
767
原创 第N2周:构建词典
用于在词汇字典中添加一些特殊的 token/ 标记,比如最常用的 ‘< unk >’ ,用于代表词汇字典中未存在的 token,当然也可以用自己喜欢的符号来代替,具体的意义也取决于用的人。在使用 jieba 进行分词时,可以通过去除停用词(即没有具体含义、对文本语义没有影响的词汇,如“的”、“是”、“这”)来减少分词结果中的噪音。●max_tokens也是按照vocab的顺序,从前往后的保存,也就是说如果两个token出现的频次一样,那么在是按照出现的顺序来决定vocab中两个单词的顺序。
2024-08-13 17:16:33
879
原创 第N3周:NLP中的数据集构建
在这个示例中,MyDataset继承了torch.utils.data.Dataset类,并实现了__len__和__getitem__方法。__len__方法返回数据集的大小,这里使用了Python内置函数len。在这个示例中,MyDataset类继承自torch.utils.data.Dataset类,实现了__len__和__getitem__方法。在这个示例中,MySampler类继承自torch.utils.data.sampler.Sampler类,实现了__iter__和__len__方法。
2024-08-09 23:02:17
833
原创 第N1周:one-hot编码案例
one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。○在文本表征表示上有些缺点非常突出,首先one-hot 编码是一个词袋模型,是不考虑词和词之间的顺序问题,它是假设词和词之间是相互独立的,但是在大部分情况下词和词之间是相互影响的。○one-hot编码得到的特征是离散稀疏的,每个单词的one-hot编码维度是整个词汇表的大小,维度非常巨大,编码稀疏,会使得计算代价变大。可以注意到上面的案例是以字为基本单位的,但词语被拆分开后,显然会失去原有的意思。
2024-08-09 16:49:29
637
原创 第R3周:天气预测
任务说明:该数据集提供了来自澳大利亚许多地点的大约 10 年的每日天气观测数据。需要做的是根据这些数据对RainTomorrow进行一个预测,这次任务任务与以往的不同,增加了探索式数据分析(EDA),希望这部分内容可以帮助到大家。位置影响下雨,对于 Portland 来说,有 36% 的时间在下雨,而对于 Woomers 来说,只有6%的时间在下雨。低压与高湿度会增加第二天下雨的概率,尤其是下午 3 点的空气湿度。结论:当一天的最高气温和最低气温接近时,第二天下雨的概率会增加。二、探索式数据分析(EDA)
2024-08-08 18:54:17
1051
原创 第R2周:Pytorch实现:LSTM-火灾温度预测
●LSTM 的输入张量的形状通常是 (seq_len, batch_size, input_size),但如果设置了 batch_first=True,则形状为 (batch_size, seq_len, input_size)。●batch_first(可选参数): 如果为 True,则输入和输出张量的形状为 (batch_size, seq_len, feature_size),默认为 False。默认为 False。●hidden_size: 隐藏状态的维度,也是输出特征的维度。
2024-08-07 22:47:20
1267
原创 第R2周:Tensorflow2实现:LSTM-火灾温度预测
任务说明:数据集中提供了火灾温度(Tem1)、一氧化碳浓度(CO 1)、烟雾浓度(Soot 1)随着时间变化数据,我们需要根据这些数据对未来某一时刻的火灾温度做出预测。为了更好的理解LSTM输入数据的结构,将时序数据(LSTM输入数据)以可视化的形式呈现。取前8个时间段的Tem1、CO 1、Soot 1为X,第9个时间段的Tem1为y。多输入单输出(多输出时间步)与多输入多输出(多输出时间步)同理,这里就不赘述了。1.使用第1 ~ 8个时刻的数据预测第9 ~ 10个时刻的温度数据。
2024-08-07 18:44:44
749
原创 第R2周:LSTM-火灾温度预测:一文搞懂LSTM(长短期记忆网络)
LSTM在许多问题上效果非常好,现在被广泛使用。长期依赖问题: 在传统的RNN中,当序列非常长时,网络往往会遇到梯度消失或梯度爆炸的问题,导致难以捕捉到序列中长距离的依赖关系。因此,LSTM通过引入门控结构和细胞状态,有效地解决了传统RNN在处理长序列数据时遇到的梯度消失、长期依赖等问题,使得其在语言建模、时间序列预测、机器翻译等任务中取得了显著的进展。●问题描述:RNN在处理长序列时,由于信息的传递是通过隐藏状态进行的,随着时间的推移,较早时间步的信息可能会在传递到后面的时间步时逐渐消失或被覆盖。
2024-08-07 17:54:54
786
原创 第R1周:RNN-心脏病预测
学习了什么是RNN,怎么处理数据,如何构建简单的RNN模型。这个过程我们可以看到,输入 “time” 的时候,前面“what” 的输出也会对02的输出产生了影响(隐藏层中有一半是黑色的)。以此类推,我们可以看到,前面所有的输入产生的结果都对后续的输出产生了影响(可以看到圆形中包含了前面所有的颜色)RNN 跟传统神经网络最大的区别在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。然后,按照顺序将五个基本单元输入RNN网络,先将 “what”作为RNN的输入,得到输出 01。
2024-08-05 23:43:35
817
原创 第TR4周:Transformer中的位置编码详解
位置编码记录了文本中字符的位置信息,这里位置信息的记录不使用单个数字(例如索引值)来记录位置信息的原因有很多。Transformer则是引入来位置编码机制来保存文本中字符的位置信息。Python实现位置编码,这是使用 NumPy 实现位置编码的简短 Python 代码。假设你有一个长度为 L 的输入序列,要计算第K个元素的位置编码。单个字符可视化,要理解位置编码,让我们从查看 n=10,000 和 d=512的不同位置的正弦波开始。可以看到每个位置对应于不同的正弦曲线,它将单个位置编码为向量。
2024-08-03 19:44:00
329
原创 第TR3周:Pytorch复现Transformer
Transformer可以看作是seq2seq模型的一种,因此,先从seq2seq的角度对Transformer进行宏观结构的学习。下图1先便是Transformer整体结构图,与seq2seq模型类似,Transformer模型结构中的左半部分为编码器,右半部分为解码器,下面我们来一步步拆解Transformer。在某种程度上,可以将Transformer看作是Seq2Seq的一种演变,Transformer可以执行Seq2Seq任务,并且相对于传统的Seq2Seq模型具有更好的性能和可扩展性。
2024-08-02 17:43:56
1261
原创 第G9周:ACGAN理论与实战
ACGAN的全称Auxiliary Classifier Generative Adversarial Network,翻译成汉语的意思就是带辅助分类器的GAN,ACGAN的原理GAN(CGAN)相似。对于CGAN,判别器的输入是图像(包含假的或真实的图像)及其标签, 输出是图像属于真实图像的概率。对于ACGAN,判别器的输入是一幅图像,而输出是该图像属于真实图像的概率以及其类别。图1是ACGAN的网络结构,可以发现该结构其 实和之前的CGAN和SGAN都非常接近,可以说是两者的结合体。
2024-08-01 01:33:56
503
原创 第G8周:ACGAN任务
之前介绍过GAN,CGAN,SGAN,用下面一张图展示这三者的关系。那么在这三者之上的ACGAN,我们能否根据下面的框架图,写出代码呢?ACGAN代码将在下一文《第G9周:ACGAN理论与实战》进行更新。算法学得多自然是好事,但是学这么多算法是为了什么呢?在做论文创新时,创新迁移是一个非常重要的一项能力。
2024-07-31 12:00:00
182
原创 第G7周:Semi-Supervised GAN 理论与实战
在训练的时候,判别器D被用于预测输入是属于 N+1类中的哪一个,这个 N+1 是对应了生成器G的输出,这里的判别器D同时也充当起了分类器C的效果。在学习GAN的时候有没有想过这样一个问题呢,如果我们生成的图像是带有标签的,例如数字 0 ~ 9,那为什么要鉴别器判断输入图像为真假,而不直接判断图像是 0 ~ 9 中的哪一个数字呢,这样的鉴别效果不是更好吗?从代码的输出结果可知,训练出来的acc在50%上下浮动,最高也才75%,而损失则是比较低,要提高acc就要调试下相关参数,就是配置代码那部分。
2024-07-31 03:31:20
603
原创 第G6周:CycleGAN实战
注意,在jupyter notebook中,要把cyclegan.py中的代码“opt = parser.parse_args()”修改为“opt = parser.parse_args([])”,才可以运行。CycleGAN 由左右两个 GAN 网络组成 G(AB) 负责把 A 类物体 (斑马) 转换成 B 类物体 (正常的马). G(BA) 负责把 B 类物体 (正常的马) 还原成 A 类物体 (斑马).如果想要在jupyter notebook中运行.py文件的,可以使用。%load 文件名.py。
2024-07-30 05:09:37
369
原创 第G5周:Pix2Pix理论与实战
本周任务详情:前言在之前的教案中,介绍了GAN可用作图像的生成,它在MNIST数据集上取得了非常好的效果。GAN的一个问题是它无法对生成模型生成的数据进行控制,为了解决这个问题,条件GAN(Conditional GAN,CGAN)提出了将在生成模型和判别模型中都加入条件信息来引导模型的训练,实现了生成内容的可控。这里要介绍的 Pix2Pix 是一个以CGAN为基础,用于图像翻译(Image Translation)的通用框架,旨在将一个图像域中的图像转换成另一个图像域中的图像,它实现了模型结构和损失函数
2024-07-29 16:33:17
376
原创 第G4周:CGAN|生成手势图像 | 可控制生成
在这里,对于一个3维的张量(假设图像维度为(C,H,W),其中C是通道数,H是高度,W是宽度),permute(1, 2, 0)将把通道维度(C)移动到最后,而将高度和宽度维度(H,W)放在前面。对于原始GAN的生成器而言,其生成的图像数据是随机不可预测的,因此我们无法控制网络的输出,在实际操作中的可控性不强。在这里,它表示将原始维度中的第0维移到新张量的第0维,第2维移到新张量的第1维,第3维移到新张量的第2维,最后,第1维移到新张量的第3维。● height:高度,表示图像的高度(或特征图的高度)。
2024-07-27 01:29:56
446
原创 第G3周:CGAN入门|生成手势图像
在这里,对于一个3维的张量(假设图像维度为(C,H,W),其中C是通道数,H是高度,W是宽度),permute(1, 2, 0)将把通道维度(C)移动到最后,而将高度和宽度维度(H,W)放在前面。images是一个包含图像的张量,nrow是可选参数,表示每行显示的图像数量。在每轮训练中,它首先从数据加载器中加载真实图像和标签,然后计算判别器对真实图像的损失,接着从噪声向量中生成假图像,计算判别器对假图像的损失,计算判别器总体损失并反向传播更新判别器的参数,然后计算生成器的损失并反向传播更新生成器的参数。
2024-07-25 04:16:13
644
原创 第G2周:人脸图像生成(DCGAN)
除了生成器模型的输出层和判别器模型的输入层,在整个对抗网络的其它层上都使用了Batch Normalization,原因是Batch Normalization可以稳定学习,有助于优化初始化参数值不良而导致的训练问题。通过这些层的组合,输入的图像逐渐被降维并提取特征,最终输出一个标量值,表示输入图像被判别为真实图像的概率。总体来说,这段代码实现了GAN的训练过程,通过交替更新判别器和生成器的参数,目标是使生成器生成逼真的图像样本,同时判别器能够准确区分真实图像样本和生成图像样本。
2024-07-23 19:42:48
1080
1
原创 第G1周:生成对抗网络(GAN)入门
一、理论基础生成对抗网络(Generative Adversarial Networks, GAN)是近年来深度学习领域的一个热点方向。GAN并不指代某一个具体的神经网络,而是指一类基于博弈思想而设计的神经网络。GAN由两个分别被称为生成器(Generator)和判别器(Discriminator)的神经网络组成。其中,生成器从某种噪声分布中随机采样作为输入,输出与训练集中真实样本非常相似的人工样本;判别器的输入则为真实样本或人工样本,其目的是将人工样本与真实样本尽可能地区分出来。生成器和判别器交替运行,
2024-07-22 11:30:00
836
原创 YOLOv8白皮书-第Y9周:重要模块解读
该文件夹下的文件与YOLOv5中的 common.py 是起到相同作用的,是实现YOLOv8算法中各个模块的地方,如果我们需要修改某一模块(例如C3),那么就需要修改这个文件夹中相应文件中对应模块的的定义。由于YOLOv8版本问题,同一个模块你可能会看到不同的版本,这都是正常的,以官网为主即可。\ultralytics-main\ultralytics\nn\modules\conv.py 为例,开头列举了该文件中定义的所有模型,如果你需要新加一个模块,记得在该文件开头这里将其名称加入。
2024-07-19 10:00:00
732
原创 YOLOv8白皮书-第Y8周:yolov8.yaml文件解读
yolov8n.yaml可以换成其他模型的yaml,如yolov8s.yaml、yolov8l.yaml、yolov8m.yaml、yolov8x.yaml。repeats:表示当前模块的理论重复次数,实际的重复次数还要由上面的参数depth_multiple共同决定,该参数影响整体网络模型的深度。网络的输入为一幅图像,输出为多个不同层数级的特征图(feature maps),将输出的特征图传递给头部(head)以产生物体检测的结果。了解了YOLOv8的各种模型结构,了解了YOLOv8各种模型的参数配置。
2024-07-16 22:00:00
578
原创 YOLOv8白皮书-第Y7周:训练自己的数据集
ImageSets文件夹下面有个Main子文件夹,其下面存放了train.txt、val.txt、test.txt 和 trainval.txt 四个文件,它们是通过split_train val.py 文件来生成的.在YOLOv8中,需要自己创建train.py文件,训练默认参数保存在 default.yaml 文件中,关键参数是可以在训练命令行 /train.py 文件中进行修改。运行voc_label.py文件生成 train.txt、test.txt、val.txt 文件,先看看要生成的文件位置。
2024-07-15 16:10:47
935
原创 YOLOv5白皮书-第Y6周:模型改进
然后在yolov5s.yaml中,在backbone把索引为4的层从C3 * 2修改为C2 * 2 ,因为yolov5s.yaml已经写明depth_multiple为0.33,0.33 * 6 约等于 2,所以第4层为:[-1, 6, C2, [256]]其实还有隐藏任务,就是去除了索引为7、8的层后,原来8层后面的索引也会改变的,这也是要注意的,特别是有concat的地方,更要注意了,这会在后面的代码修改中有解释。把索引为4的层从C3 * 2修改为C2 * 2。
2024-07-13 22:28:14
1254
1
原创 YOLOv5白皮书-第Y5周:yolo.py文件解读
(self, cfg=‘yolov5s.yaml’, ch=3, nc=None, anchors=None): 初始化方法,接收模型的配置文件路径 cfg、输入通道数 ch、类别数 nc 和 anchors。_apply(self, fn): 应用给定的函数到模型的张量上,例如 to(), cpu(), cuda(), half()。_descale_pred(self, p, flips, scale, img_size): 对增强推断得到的预测结果进行逆操作,将预测框的坐标还原到原始图像尺寸。
2024-07-12 21:46:59
681
原创 YOLOv5白皮书-第Y4周:common.py文件解读
经典的空间金字塔池化模块首先将输入的卷积特征分成不同的尺寸,然后每个尺寸提取固定维度的特征,最后将这些特征拼接成一个固定的维度,如图所示。输入的卷积特征图的大小为(w,h),第一层空间金字塔采用4×4的刻度对特征图进行划分,其将输入的特征图分成了16个块,每块的大小为(w/4, h/4);Focus模块是yolov5作者自己设计出来,为了减少浮点数和提高速度,而不是增加featuremap的,本质就是将图像进行切片,类似于下采样取值,将原图像的宽高信息切分,聚合到channel通道中。
2024-07-10 04:09:49
733
原创 YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读
本文为[365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg)中的学习记录客原作者:[K同学啊]https://mtyjkh.blog.csdn.net/这是在上一篇文章《YOLOv5白皮书-第Y2周:训练自己的数据集》的基础上进行的。
2024-07-07 04:29:56
911
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人