- 博客(246)
- 收藏
- 关注
原创 random.shuffle()
函数时,会直接修改原始列表,而不会返回一个新的列表。这意味着在操作之后,原始列表的顺序会被打乱。原始列表的顺序会被打乱,而不会返回一个新的列表。
2024-03-27 22:19:26 157
原创 for x, x in train_loader与for batch_idx, (x, x) in enumerate(train_loader):迭代方式区别
综上所述,对于简单的图像和标签数据集,两种迭代方式并没有太大区别,你可以根据自己的喜好和习惯选择其中一种。如果不需要追踪迭代次数,直接使用。如果需要追踪迭代次数,可以使用。
2024-03-27 15:26:24 59
原创 AutoTokenizer.from_pretrained 与BertTokenizer.from_pretrained
都是 Hugging Face 的 Transformers 库中用于加载预训练模型的 tokenizer 的方法,但它们之间有一些区别。总的来说,如果你想要一个通用的方法来加载任何预训练模型的 tokenizer,你可以使用。但如果你确定你要加载的模型是基于 BERT 结构的,那么。也是一个不错的选择。
2024-03-23 23:00:03 284
转载 pytorch之warm-up预热学习策略(学习率)
由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习来进行训练。
2024-03-14 16:31:20 100
转载 通过loss曲线诊断神经网络模型
看loss曲线,如果train loss和val loss都还有下降空间,就继续加大epoch,如果基本平了,加大epoch用处也不大了,如果train loss降val loss降着降着上升了,这说明,模型在val loss由降转升的转折点就收敛了。
2024-03-04 18:48:36 25
转载 使用wandb可视化训练过程
转载:7.4 使用wandb可视化训练过程 — 深入浅出PyTorch (datawhalechina.github.io)
2024-02-28 13:49:47 27
原创 .norm() 范数
是默认计算A与B的第二范数,如果你想计算差向量的第一范数(也称为L1范数),可以在norm()方法中传递p=1参数,这样就会计算出L1范数。
2024-02-26 22:10:37 376
原创 Imagenet-A,Imagenet-C和ImageNet-O
ImageNet-O 包含来自在 ImageNet-1k 数据集中未发现的类别的图像。对ImageNet 1K添加了一些常见的图像损坏(如模糊和噪声),以评估分类器在面对这些损坏时的性能。这样的评估可以帮助研究人员更全面地了解模型的鲁棒性和泛化能力。该数据集包含 7,500 张经过对抗性过滤的图像,很容易导致机器学习模型的性能显著下降。mCE:用于评估模型在面对不同类型的图像扭曲、噪声或其他损坏时的鲁棒性。对于每个图像,通过对其应用一种或多种损坏类型生成扰动后的图像。计算每个扰动下的分类错误率。
2024-01-24 22:32:04 566
转载 Parquet格式文件读取
Parquet 文件以列格式存储,而不是像 CSV 这样的基于行的文件。大型数据集可能存储在 Parquet 文件中,因为它比返回查询更高效和更快。huggingface里面的数据集基本用。
2024-01-16 21:45:10 312
原创 Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward passRunti
有可能真的不是你的写的backward有问题,而是你的环境有问题,莫名其妙,换了一个之前的环境就好了。
2024-01-15 15:14:18 871
转载 Pytorch的默认初始化分布 nn.Embedding.weight初始化分布
如果不给weight赋值,Embedding类会自动给他初始化,看上述代码第6~8行,如果属性weight没有手动赋值,则会定义一个torch.nn.parameter.Parameter对象,然后对该对象进行reset_parameters(),看第21行,对self.weight先转为Tensor在对其进行normal_(0, 1)(调整为$N(0, 1)$正态分布)。,即均值$\mu=0$,方差$\sigma=1$的正态分布。可见,均值接近0,方差接近1,从这里也可以反映出。
2024-01-12 23:47:36 456
原创 checkpoint存的是参数还是模型?
在深度学习中,术语 "checkpoint" 通常用来指代在训练过程中保存的模型参数的一种形式。模型参数是深度学习模型中学到的权重和偏置等参数,它们定义了模型的状态。当你在训练深度学习模型时,你可能会定期保存模型的参数,以便在需要时能够恢复训练或者用于推断。这些保存的参数通常被称为 checkpoint。当你加载一个 checkpoint 时,你可以将这些参数设置到模型中,使模型恢复到之前保存的状态。一个 checkpoint 文件通常包含了模型中所有的。你的模型架构与保存时相同,以便能够正确地加载参数。
2024-01-12 22:52:49 505
原创 backbone
在BERT,GPT,Transformers模型被提出之前,被广泛使用的自然语言处理网络结构式RNN。RNN的主要功能是把能把自然语言的句子抽取成特征向量,又来特征向量之后再接入全连接网络做分类或者回归就水到渠成了。相对于backbone的网络,后续的处理神经网络被称为下有任务模型,它往往会对backbone输出的特征向量进行在计算,得到业务上需要的计算结构,这往往也是分类或回归需要的结果。从这个角度讲,RNN把一个自然语言处理的任务转换成了全连接神经网络任务。什么是backbone?
2024-01-07 10:50:50 376
原创 Auto tokenizer和Bert tokenizer的区别
在上述示例中,"AutoTokenizer.from_pretrained()" 会根据指定的模型名称(例如 "bert-base-uncased")自动选择合适的tokenizer,而无需明确指定 BERT Tokenizer。例如,如果您使用 BERT 模型,"AutoTokenizer.from_pretrained()" 可以自动加载适用于 BERT 的tokenizer。"AutoTokenizer" 和 "BERT Tokenizer" 是两个不同概念,而不是两种不同的tokenizer。
2024-01-07 10:10:51 775
原创 Zero-Shot Learning
huggingface 有一个巨大的模型库,其中一些事已经非常。不进行任何训练也能直接得出比较好的预测结果。
2024-01-07 09:53:50 337
原创 nlp中的transformer中的mask
由于在实现多头注意力时需要考虑到各种情况下的掩码,因此在这里需要先对这部分内容进行介绍。第1个地方就是在上一篇文章用介绍到的Attention Mask,用于在训练过程中解码的时候掩盖掉当前时刻之后的信息;但是在解码过程中为了模拟在真实的inference场景中,当前位置看不到下一位置,且同时需要上一位置的信息,所以在训练的时候加了attention mask。所以,如果你的任务在实际的inference中也符合这样的特点,那么你在训练的时候也是需要attention,相反则不需要。
2024-01-05 17:44:42 573
原创 mask = (x > 0).unsqueeze(1).repeat(1, x.size(1), 1).unsqueeze(1)
的目的是创建一个用于屏蔽(masking)的张量,该张量将在输入序列中标记为填充(padding)的位置进行屏蔽。这是因为在自注意力机制中,模型需要知道哪些位置是真实的输入,而哪些位置是填充的,以便正确计算注意力权重。在 BERT 模型的自注意力机制中被用来屏蔽掉填充位置,确保在计算注意力时不考虑填充的位置。相同形状的布尔张量,其中每个元素是对应位置上元素是否大于零的判断结果。:复制第二个维度(seq_len 维度)的内容,将布尔张量的形状变为。:在第二个维度上插入一个维度,将布尔张量的形状从。
2024-01-04 16:34:47 418
原创 positon emb(位置编码存在PAD)部分
第四步:[0, 1024, 1024, 1024, 1024, 5, 6, 7, 8, 9]* [0, 1, 1, 1, 1, 0, 0, 0, 0, 0]= [ 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0]第一步:(1-[0, 1, 1, 1, 1, 0, 0, 0, 0, 0])* [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] =[0, 0, 0, 0, 0, 5, 6, 7, 8, 9]:若shuffle ratio=1.0。
2024-01-02 11:15:52 329
原创 BCELoss,BCEWithLogitsLoss和CrossEntropyLoss
等价于:nn.CrossEntropyLoss = nn.NLLLoss(nn.LogSoftmax)输出:一个标量(这个minibatch的mean/sum的loss)两个损失:BCELoss,BCEWithLogitsLoss。输入:([B,C], [B,C])输入:([B,C], [B,C])输入:([B,C], [B])
2023-12-27 09:09:39 715
原创 知识蒸馏 Knowledge Distillation(在tinybert的应用)
蒸馏(Knowledge Distillation)是一种模型压缩技术,通常用于将大型模型的知识转移给小型模型,以便在保持性能的同时减小模型的体积和计算开销。这个过程涉及到使用一个大型、复杂的模型(通常称为教师模型)生成的软标签(概率分布),来训练一个小型模型(通常称为学生模型)。具体而言,对于分类问题,教师模型生成的概率分布可以看作是对每个类别的软标签,而学生模型通过学习这些软标签来进行训练。这种方式相比直接使用硬标签(即真实的标签)进行训练,通常能够提供更多的信息,帮助学生模型更好地捕捉数据的细节。
2023-12-25 20:27:58 361
原创 python中[None, :]的用法
的第一个维度进行广播,使得两者的形状能够相加。这样,每个位置的嵌入都与相应的位置信息相加,从而引入了位置编码。,然后通过广播(broadcasting)机制,它会与。的目的是为了将其变成一个二维张量,以便与。张量的第二个维度长度相同。
2023-12-19 17:24:30 492
原创 单机多卡训练-DDP
DDP通过Ring-Reduce(梯度合并)的数据交换方法提高了通讯效率,并通过启动多个进程的方式减轻Python GIL的限制,从而提高训练速度。,建议在保存模型时,去除模型参数字典里面的module,如何去除呢,每一个epoch里面真正的打乱数据。增大batch size提高并行度。
2023-12-17 23:04:35 481
转载 Out-of-distribution Detection 和 In-distribution
OOD detection任务(后面简称OOD)解决的问题就是如何检测出 Out-of-distribution 的样本,同时能维持In-distribution样本分类的准确率。
2023-12-10 10:21:01 124
原创 机器翻译,文本生成评估指标BELU,BERTSCORE
1.1 BLEU 的全称是 Bilingual evaluation understudy,BLEU 的分数取值范围是 0~1,分数越接近1,说明翻译的质量越高。BLEU 主要是基于精确率(Precision)的,下面是 BLEU 的整体公式。
2023-12-05 15:38:35 754
转载 transformers tokenizer.encode_plus() 的padding=True踩的坑
当做单句子任务时,padding=True是错误的,它不会做padding。而pad_to_max_length=True的效果和padding = 'max_length'是等价的。但是pad_to_max_length=True会报warning,提示将在后续版本中移除,
2023-12-05 14:18:41 78
原创 transformer没有BN层
在 Transformer 中,每个位置的输入独立地参与注意力计算,因此位置之间的关系是通过注意力权重建模的,而不是通过 BN 等层引入的批次之间的统计信息。总的来说,Transformer 网络不需要 BN 层,因为自注意力机制自身不依赖于统计信息的归一化。传统的 Transformer 模型中通常不包含 Batch Normalization(BN)层。在一些情况下,为了更好的性能或训练稳定性,可以。,能够更好地处理变长序列。
2023-11-28 17:10:49 475
原创 Screen操作
这样,你可以在一个终端窗口中启动一个Screen会话,然后在需要的时候将其分离,使其在后台持续运行,而不占用当前终端。请确保你不要在相同的终端窗口中尝试重新连接已经附加的Screen会话,因为一个会话不能同时附加到多个终端。当前运行的Screen会话从终端分离(detach),使其在后台继续运行而不受当前终端窗口的影响。状态,这表示有一个Screen会话在后台运行并且已经被分离。Screen会话的状态可以是。如果你想重新连接到具体的会话,你可以运行。当你在基础(base)终端运行。
2023-11-26 22:09:53 454
原创 nn.functional与nn.Module的区别,自定义层步骤(创建model步骤)
2). 激活函数(ReLU、sigmoid、Tanh)、池化(MaxPool)等层没有可学习的参数,可以使用对应的functional函数。nn中还有一个很常用的模块:nn.functional。4). dropout没有可学习参数,但建议使用nn.Dropout而不是nn.functional.dropout。为了便于对参数进行管理,一般通过继承 nn.Module 转换成为类的实现形式,并直接封装在 nn 模块下。nn.functional中的函数和nn.Module的主要区别在于,用。
2023-11-26 11:53:36 1035
转载 conda环境从一个服务器迁移到另一个服务器
conda环境从一个服务器迁移到另一个服务器 - 知乎 (zhihu.com)参考:把一个服务器上的环境迁移到另一个服务器上_服务器迁移到另一台服务器-CSDN博客。
2023-11-25 22:50:18 194
原创 MLP 有哪些可学习的参数
多层感知机(MLP)的参数是需要在训练过程中学习的。在训练过程中,MLP通过反向传播算法来调整网络的权重,以最小化预测值与实际值之间的误差。如果在隐藏层中使用了可学习的激活函数,例如参数化的激活函数(Parametric Activation Function),那么这些参数也需要进行学习。每个神经元之间的连接都有一个权重,这些权重需要在训练中进行调整,以使模型能够捕捉输入数据中的模式和关系。将根据梯度更新这些参数。这是一个简单的MLP训练过程,实际应用中可能需要根据任务和数据集的不同进行调整。
2023-11-23 20:13:26 644
转载 Embbedding的理解
在 PyTorch 中,针对词向量有一个专门的层 nn.Embedding ,用来实现词与词向量的映射。nn.Embedding 相当于一个词表,形状为 (如果 Embedding 层的输入形状为 NxM(N为batch_size,M是序列的长度),则输出的形状是 N x M x embedding_dim.) ,其中 num_embedding 表示词表的长度,embedding_dim 表示词向量的维度,如果输入张量中不同词的个数超过词表的长度,就会报数组越界异常。方法转成 LongTensor。
2023-11-21 16:52:48 46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人