一文讲解:模型微调(fine-tune)

Fine tune简介 移学习不是一种算法而是一种机器学习思想,应用到深度学习就是微调(Fine-tune)。通过修改预训练网络模型结构(如修改样本类别输出个数),选择性载入预训练网络模型权重(通常是载入除最后的全连接层的之前所有层 ,也叫瓶颈层)再用自己的数据集重新训练模型就是微调的基本步骤。微调能够快速训练好一个模型,用相对较小的数据量,还能达到不错的结果。 阅读详情
AI摘要

本文详细介绍了模型微调(fine-tune)的基础知识,包括其概念、为何要微调、需微调的情况、流程等。还阐述了参数冻结的方式、修改模型参数和结构的方法,以及模型微调的数据准备和实际操作,如数据集准备、数据蒸馏等。

一、关于模型微调的一些基础知识
1、模型微调(fine-tune)
微调(fine-tune)通过使用在大数据上得到的预训练好的模型来初始化自己的模型权重,从而提升精度。这就要求预训练模型质量要有保证。微调通常速度更快、精度更高。当然,自己训练好的模型也可以当做预训练模型,然后再在自己的数据集上进行训练,来使模型适用于自己的场景、自己的任务。

先引入迁移学习(Transfer Learning)的概念:

    当我们训练好了一个模型之后,如果想应用到其他任务中,可以在这个模型的基础上进行训练,来作微调网络。这也是迁移学习的概念,可以节省训练的资源以及训练的时间。

    迁移学习的一大应用场景就是模型微调,简单的来说就是把在别人训练好的基础上,换成自己的数据集继续训练,来调整参数。Pytorch中提供很多预训练模型,学习如何进行模型微调,可以大大提升自己任务的质量和速度。

    假设我们要识别的图片类别是椅子,尽管ImageNet数据集中的大多数图像与椅子无关,但在ImageNet数据集上训练的模型可能会提取更通用的图像特征,这有助于识别边缘、纹理、形状和对象组合。 这些类似的特征对于识别椅子也可能同样有效。

负迁移问题:
​​​​​​​负迁移(Negative Transfer)指的是,在源域上学习到的知识,对于目标域上的学习产生负面作用。

产生负迁移的原因主要有:
1、数据问题:源域和目标域压根不相似,谈何迁移?
2、方法问题:源域和目标域是相似的,但是,迁移学习方法不够好,没找到可迁移的成分。

负迁移给迁移学习的研究和应用带来了负面影响。在实际应用中,找到合理的相似性,并且选择或开发合理的迁移学习方法,能够避免负迁移现象。

2、为什么要微调
因为预训练模型用了大量数据做训练,已经具备了提取浅层基础特征和深层抽象特征的能力。

对于图片来说,我们CNN的前几层学习到的都是低级的特征,比如,点、线、面,这些低级的特征对于任何图片来说都是可以抽象出来的,所以我们将他作为通用数据,只微调这些低级特征组合起来的高级特征即可,例如,这些点、线、面,组成的是园还是椭圆,还是正方形,这些代表的含义是我们需要后面训练出来的。

前排提示,文末有大模型AGI-优快云独家资料包哦!

    如果我们自己的数据不够多,泛化性不够强,那么可能存在模型不收敛,准确率低,模型泛化能力差,过拟合等问题,所以这时就需要使用预训练模型来做微调了。注意的是,进行微调时,应该使用较小的学习率。因为预训练模型的权重相对于随机初始化的权重来说已经很不错了,所以不希望使用太大的学习率来破坏原本的权重。通常用于微调的初始学习率会比从头开始训练的学习率小10倍。

了解学习率:在这里插入图片描述

总结:对于不同的层可以设置不同的学习率,一般情况下建议,对于使用的原始数据做初始化的层设置的学习率要小于(一般可设置小于10倍)初始化的学习率,这样保证对于已经初始化的数据不会扭曲的过快,而使用初始化学习率的新层可以快速的收敛。
train/loss:训练级loss
eval/loss:验证级loss,这两者一般以图表的形式表达
过拟合

在这里插入图片描述

3、需要微调的情况
其中微调的方法又要根据自身数据集和预训练模型数据集的相似程度,以及自己数据集的大小来抉择。
不同情况下的微调:

数据少,数据类似程度高:可以只修改最后几层或者最后一层进行微调。
数据少,数据类似程度低:冻结预训练模型的前几层,训练剩余的层。因为数据集之间的相似度较低,所以根据自身的数据集对较高层进行重新训练会比较有效。
数据多,数据类似程度高:这是最理想的情况。使用预训练的权重来初始化模型,然后重新训练整个模型。这也是最简单的微调方式,因为不涉及修改、冻结模型的层。
数据多,数据类似程度低:微调的效果估计不好,可以考虑直接重新训练整个模型。如果你用的预训练模型的数据集是ImageNet,而你要做的是文字识别,那么预训练模型自然不会起到太大作用,因为它们的场景特征相差太大了。
注意:

如果自己的模型中有fc层,则新数据集的大小一定要与原始数据集相同,比如CNN中输入的图片大小一定要相同,才不会报错。
如果包含fc层但是数据集大小不同的话,可以在最后的fc层之前添加卷积或者pool层,使得最后的输出与fc层一致,但这样会导致准确度大幅下降,所以不建议这样做

4、 模型微调的流程
微调的步骤有很多,看你自身数据和计算资源的情况而定。虽然各有不同,但是总体的流程大同小异。

步骤示例1:

1、在源数据集(如ImageNet数据集)上预训练一个神经网络模型,即源模型。

2、创建一个新的神经网络模型,即目标模型。它复制了源模型上除了输出层外的所有模型设计及其参数。

我们假设这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。
我们还假设源模型的输出层跟源数据集的标签紧密相关,因此在目标模型中不予采用。
3、为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。

4、在目标数据集(如椅子数据集)上训练目标模型。可以从头训练输出层,而其余层的参数都是基于源模型的参数微调得到的。

步骤示例2:

在已经训练好的网络上进行修改;
冻结网络的原来那一部分;
训练新添加的部分;
解冻原来网络的部分层;
联合训练解冻的层和新添加的部分。
在这里插入图片描述
5、参数冻结—指定训练模型的部分层
我们所提到的冻结模型、冻结部分层,其实归根结底都是对参数进行冻结。冻结训练可以加快训练速度。在这里,有两种方式:全程冻结与非全程冻结。
非全程冻结比全程冻结多了一个步骤:解冻,因此这里就讲解非全程冻结。看完非全程冻结之后,就明白全程冻结是如何进行的了。
非全程冻结训练分为两个阶段,分别是冻结阶段和解冻阶段。当处于冻结阶段时,被冻结的参数就不会被更新,在这个阶段,可以看做是全程冻结;而处于解冻阶段时,就和普通的训练一样了,所有参数都会被更新。
当进行冻结训练时,占用的显存较小,因为仅对部分网络进行微调。如果计算资源不够,也可以通过冻结训练的方式来减少训练时资源的占用。

因为一般需要保留Features Extractor的结构和参数,提出了两种训练方法:

固定预训练的参数:requires_grad = False 或者 lr = 0,即不更新参数;
将Features Extractor部分设置很小的学习率,这里用到参数组(params_group)的概念,分组设置优化器的参数。

5.1、参数冻结的方式
我们经常提到的模型,就是一个可遍历的字典。既然是字典,又是可遍历的,那么就有两种方式进行索引:一是通过数字,二是通过名字。

其实使用冻结很简单,没有太高深的魔法,只用设置模型的参数requires_grad为False就可以了。
5.1.1、冻结方式1
在默认情况下,参数的属性​​.requires_grad = True​​​,如果我们从头开始训练或微调不需要注意这里。但如果我们正在提取特征并且只想为新初始化的层计算梯度,其他参数不进行改变。那我们就需要通过设置​​requires_grad = False​​来冻结部分层。在PyTorch官方中提供了这样一个例程。

def set_parameter_requires_grad(model, feature_extracting):
    if feature_extracting:
        for param in model.parameters():
            param.requires_grad = False

在下面我们使用​​resnet18​​为例的将1000类改为4类,但是仅改变最后一层的模型参数,不改变特征提取的模型参数;

注意我们先冻结模型参数的梯度;
再对模型输出部分的全连接层进行修改,这样修改后的全连接层的参数就是可计算梯度的。
在训练过程中,model仍会进行梯度回传,但是参数更新则只会发生在fc层。通过设定参数的​​requires_grad​​属性,我们完成了指定训练模型的特定层的目标,这对实现模型微调非常重要。

import torchvision.models as models
# 冻结参数的梯度
feature_extract = True
model = models.resnet18(pretrained=True)
set_parameter_requires_grad(model, feature_extract)
# 修改模型, 输出通道4, 此时,fc层就被随机初始化了,但是其他层依然保存着预训练得到的参数。
model.fc = nn.Linear(in_features=512, out_features=4, bias=True)

我们直接拿​​torchvision.models.resnet50 ​​模型微调,首先冻结预训练模型中的所有参数,然后替换掉最后两层的网络(替换2层池化层,还有fc层改为dropout,正则,线性,激活等部分),最后返回模型:

 8 更改池化层

class AdaptiveConcatPool2d(nn.Module):
    def __init__(self, size=None):
        super().__init__()
        size = size or (1, 1) # 池化层的卷积核大小,默认值为(1,1)
        self.pool_one = nn.AdaptiveAvgPool2d(size) # 池化层1
        self.pool_two = nn.AdaptiveAvgPool2d(size) # 池化层2
 
    def forward(self, x):
        return torch.cat([self.pool_one(x), self.pool_two(x), 1]) # 连接两个池化层
 
# 7 迁移学习:拿到一个成熟的模型,进行模型微调

```javascript
def get_model():
    model_pre = models.resnet50(pretrained=True) # 获取预训练模型
    # 冻结预训练模型中所有的参数
    for param in model_pre.parameters():
        param.requires_grad = False
    # 微调模型:替换ResNet最后的两层网络,返回一个新的模型
    model_pre.avgpool = AdaptiveConcatPool2d() # 池化层替换
    model_pre.fc = nn.Sequential(
        nn.Flatten(), # 所有维度拉平
        nn.BatchNorm1d(4096), # 256 x 6 x 6   ——> 4096
        nn.Dropout(0.5),  # 丢掉一些神经元
        nn.Linear(4096, 512),  # 线性层的处理
        nn.ReLU(), # 激活层
        nn.BatchNorm1d(512), # 正则化处理
        nn.Linear(512,2),
        nn.LogSoftmax(dim=1), # 损失函数
    )
 
    return

5.1.2、冻结方式2
因为ImageNet有1000个类别,所以提供的ImageNet预训练模型也是1000分类。如果我需要训练一个10分类模型,理论上来说只需要修改最后一层的全连接层即可。

如果前面的参数不冻结就表示所有特征提取的层会使用预训练模型的参数来进行参数初始化,而最后一层的参数还是保持某种初始化的方式来进行初始化。

在模型中,每一层的参数前面都有前缀,比如conv1、conv2、fc3、backbone等等,我们可以通过这个前缀来进行判断,也就是通过名字来判断,如:if “backbone” in param.name,最终选择需要冻结与不需要冻结的层。最后需要将训练的参数传入优化器进行配置。

if freeze_layers:
       for name, param in model.named_parameters():
           # 除最后的全连接层外,其他权重全部冻结
           if "fc" not in name:
               param.requires_grad_(False)
 
pg = [p for p in model.parameters() if p.requires_grad]
optimizer = optim.SGD(pg, lr=0.01, momentum=0.9, weight_decay=4E-5)

或者判断该参数位于模型的哪些模块层中,如param in model.backbone.parameters(),然后对于该模块层的全部参数进行批量设置,将requires_grad置为False。

if Freeze_Train:
   for param in model.backbone.parameters():
       param.requires_grad = False

5.1.3、冻结方式3
通过数字来遍历模型中的层的参数,冻结所指定的若干个参数, 这种方式用的少

count = 0
for layer in model.children():
   count = count + 1
   if count < 10:
       for param in layer.parameters():
           param.requires_grad = False
 
# 然后将需要训练的参数传入优化器,也就是过滤掉被冻结的参数。
optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, model.parameters()), lr=LR)

5.2、修改模型参数
前面说道,冻结模型就是冻结参数,那么这里的修改模型参数更多的是修改模型参数的名称。

值得一提的是,由于训练方式(单卡、多卡训练)、模型定义的方式不同,参数的名称也会有所区别,但是此时模型的结构是一样的,依旧可以加载预训练模型。不过却无法直接载入预训练模型的参数,因为名称不同,会出现KeyError的错误,所以载入前可能需要修改参数的名称。

比如说,使用多卡训练时,保存的时候每个参数前面多会多出’module.'这几个字符,那么当使用单卡载入时,可能就会报错了。
在这里插入图片描述通过以下方式,就可以使用’conv1’来替代’module.conv1’这个key的方式来将更新后的key和原来的value相匹配,再载入自己定义的模型中。

model_dict = pretrained_model.state_dict()
pretrained_dict={k: v for k, v in pretrained_dict.items() if k[7:] in model_dict}
model_dict.update(pretrained_dict)

5.3、修改模型结构

import torch.nn as nn
import torch
 
 
class AlexNet(nn.Module):
   def __init__(self):
       super(AlexNet, self).__init__()
       self.features=nn.Sequential(
           nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),  # 使用卷积层,输入为3,输出为64,核大小为11,步长为4
           nn.ReLU(inplace=True),  # 使用激活函数
           nn.MaxPool2d(kernel_size=3, stride=2),  # 使用最大池化,这里的大小为3,步长为2
           nn.Conv2d(64, 192, kernel_size=5, padding=2), # 使用卷积层,输入为64,输出为192,核大小为5,步长为2
           nn.ReLU(inplace=True),# 使用激活函数
           nn.MaxPool2d(kernel_size=3, stride=2), # 使用最大池化,这里的大小为3,步长为2
           nn.Conv2d(192, 384, kernel_size=3, padding=1), # 使用卷积层,输入为192,输出为384,核大小为3,步长为1
           nn.ReLU(inplace=True),# 使用激活函数
           nn.Conv2d(384, 256, kernel_size=3, padding=1),# 使用卷积层,输入为384,输出为256,核大小为3,步长为1
           nn.ReLU(inplace=True),# 使用激活函数
           nn.Conv2d(256, 256, kernel_size=3, padding=1),# 使用卷积层,输入为256,输出为256,核大小为3,步长为1
           nn.ReLU(inplace=True),# 使用激活函数
           nn.MaxPool2d(kernel_size=3, stride=2),  # 使用最大池化,这里的大小为3,步长为2
      )
       self.avgpool=nn.AdaptiveAvgPool2d((6, 6))
       self.classifier=nn.Sequential(
           nn.Dropout(),# 使用Dropout来减缓过拟合
           nn.Linear(256 * 6 * 6, 4096),   # 全连接,输出为4096
           nn.ReLU(inplace=True),# 使用激活函数
           nn.Dropout(),# 使用Dropout来减缓过拟合
           nn.Linear(4096, 4096),  # 维度不变,因为后面引入了激活函数,从而引入非线性
           nn.ReLU(inplace=True),  # 使用激活函数
           nn.Linear(4096, 1000),   #ImageNet默认为1000个类别,所以这里进行1000个类别分类
      )
     
 
   def forward(self, x):
       x=self.features(x)
       x=self.avgpool(x)
       x=torch.flatten(x, 1)
       x=self.classifier(x)
       return x
 
def alexnet(num_classes, device, pretrained_weights=""):
   net=AlexNet()  # 定义AlexNet
   if pretrained_weights:  # 判断预训练模型路径是否为空,如果不为空则加载
       net.load_state_dict(torch.load(pretrained_weights,map_location=device))
   
   num_fc=net.classifier[6].in_features  # 获取输入到全连接层的输入维度信息
   net.classifier[6]=torch.nn.Linear(in_features=num_fc, out_features=num_classes) # 根据数据集的类别数来指定最后输出的out_features数目
   return net

在上述代码中,是先将权重载入全部网络结构中。此时,模型的最后一层大小并不是预想的,因此需要获取输入到最后一层全连接层之前的维度大小,然后根据数据集的类别数来指定最后输出的out_features数目,以此代替原来的全连接层。

也可以先定义好具有指定全连接大小的网络结构,然后除了最后一层全连接层之外,全部层都载入预训练模型;也可以先将权重载入全部网络结构中,然后删掉最后一层全连接层,最后再加入一层指定大小的全连接层。

详情参考:https://blog.youkuaiyun.com/ytusdc/article/details/128522887

大模型应用技术分类底座:
1,提示词工程
2,知识库
3,AI Agent
4,微调

二、模型微调的数据准备
1,模型准备
2,模型加载
from *** import ******
·冻结参数
·输出层调整(fp16/fp32精度),输出层一般需要更高的精度,原有的权重不需要改变,这样在计算loss的时候会使loss更加合理。
一些准备步骤在引入函数的时候可能就已经处理过了
eg:baichuan-7B
在这里插入图片描述模型定义变化:
在这里插入图片描述在这里插入图片描述
训练的时候模型会计算损失函数,一般采用CrossEntropyLoss
另外语言模型的loss是根据上一个输入去预测下一个输出,所以labels和input_ids会差一位,因此在Transformers中的forward中已经定义了,如下代码
在这里插入图片描述
另外一些参数的介绍,学习率,GPU实际使用的数量 * batch_size
显存较小可以调低对应的batch_size,调高累计梯度
在这里插入图片描述

三、模型微调的实际操作(训练)
1,准备数据集,一般如果没有专有数据集的话一般用GPT处理数据(蒸馏数据),然后预处理数据,最后进行数据微调。gpt-llm-trainer集成了这三步
数据蒸馏:数据集蒸馏旨在构造一个合成数据集,其数据规模远小于原始数据集,但却能使在其上面训练的模型达到和原始数据集相似的精度。论文链接: Dataset Distillation by Matching Training Trajectories


优快云独家福利

最后,感谢每一个认真阅读我文章的人,礼尚往来总是要有的,下面资料虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

Pytorch—模型微调(fine-tune) 对于不同的层可以设置不同的学习率,一般情况下建议,对于使用的原始数据做初始化的层设置的学习率要小于(一般可设置小于10倍)初始化的学习率,这样保证对于已经初始化的数据不会扭曲的过快,而使用初始化学习率的新层可以快速的收敛。 阅读详情

相关推荐

【大模型】模型微调(非常详细)从入门到精通,看这一篇就够了

本文结合示例简单讨论如何使用LoRA微调 (FT) 预训练的 LLM。LoRA原理将在接下来的文章里详细讨论。

python_first1的博客 6357

模型微调(fine-tune)

模型微调(fine-tune)

爱敲代码的狼仔 6277

如何微调(Fine-tuning)大语言模型?

从 GPT3 到 ChatGPT、从GPT4 到 GitHub copilot的过程,微调在其中扮演了重要角色。什么是微调(fine-tuning)?微调能解决什么问题?什么是 LoRA?如何进行微调?本文将解答以上问题,并通过代码实例展示如何使用 LoRA 进行微调。微调的技术门槛并不高,如果微调的模型规模不大 10B 及 10B 以下所需硬件成本也不高(10B模型并不是玩具,不少生产中会使用10B的模型),即使非专业算法同学,也可动手尝试微调自己的模型。

2401_86435672的博客 1112

【大模型微调】一文掌握7种大模型微调的方法

本篇文章深入分析了大型模型微调的基本理念和多样化技术,细致介绍了LoRA、适配器调整(Adapter Tuning)、前缀调整(Prefix Tuning)等多个微调方法。详细讨论了每一种策略的基本原则、主要优点以及适宜应用场景,使得读者可以依据特定的应用要求和计算资源限制,挑选最适合的微调方案。大型语言模型(LLM)的训练过程通常分为两大阶段:阶段一:预训练阶段在这个阶段,大型模型会在大规模的无标签数据集上接受训练,目标是使模型掌握语言的统计特征和基础知识。

python123456_的博客 5万+

模型微调有哪些不同方法?

模型微调(Fine-tuning)有许多不同的方法,这些方法可以根据任务类型、数据情况和模型结构进行调整。首先,将预训练模型的底部几层(或全部层)冻结,这些层包含了在大规模数据上学到的通用特征。为不同的层设置不同的学习率,通常底层使用较小的学习率,而顶层使用较大的学习率。在预训练模型的基础上,逐层进行微调,从顶层开始,逐步向底层微调。在预训练模型的基础上,对整个模型进行微调,包括底层和顶层。从底层开始,逐层解冻并进行微调。在微调时,考虑目标域的特点,使用一些领域适应方法来提高模型在特定领域的性能。

优快云 精品推荐 1475

动态掩码语言模型(MLM)优化策略:效率提升与最新技术实践

本文深入探讨了动态掩码语言模型(MLM)的优化策略与技术实践,涵盖核心原理、效率优化及2025年最新突破。重点解析了动态掩码在提升模型性能中的关键作用,包括工程实现、掩码策略演进及混合专家动态掩码等创新技术,为自然语言处理领域的研究与应用提供实用指南。

vscode5coder的博客 222

一文讲解:模型微调(fine-tune)从入门到精通,小白也能轻松掌握的模型调优技巧

同时课程详细介绍了。

HJS123456780的博客 762

pytorch中的wheel文件

whl 文件是 Python 的一个软件包分发格式,用于在 Python 中安装软件包。它是 Python Wheel 的缩写,也被称为 wheel 文件。这种文件格式旨在简化 Python 软件包的安装和分发。对于 PyTorch 而言,它提供了预编译的 .whl 文件,您可以通过 pip 安装这些文件来快速方便地安装 PyTorch。这些 .whl 文件是已经编译好的二进制分发文件,可以直接安装在您的 Python 环境中,而无需再进行编译。

bj_zhb的博客 3127

在pytorch中进行预训练模型的加载和模型的fine-tune操作

联系方式: e-mail: FesianXu@163.com QQ: 973926198 github: https://github.com/FesianXu 文章目录 基模型参数加载    从持久化模型开始    加载模型    部分加载模 模型Fine-Tune 给每一层或者每个模型设置不同的学习率 Pytorch内置的模型 Reference 在使用pytorch的时候,经常有需要使用一些通用的模型模块作为子模块,比如著名的resnet,densenet,alexnet,in

qq_35091353的博客 2829

全新RGB-D及平面法线数据集DIODE

丰田工业大学联合芝加哥大学和北航发布全新RGB-D及平面法线数据集 DIODE (Dense Indoor and Outdoor DEpth)。

qq_43477338的博客 1540

影像组学分析流程中,图像分割前要做的事(图像预处理)

在InputVolume中无法找到自己想要重采样的序列,这时可以检查一下序列的Volume type是不是MRMLMulti。这时,Volume type将由MRMLMulti改为Scaler,随后即可在3D slicer中完成Resample Scaler Volume。2.1、重采样:通过3Dslicer中的Resample Scaler Volume实现。具体设置参数:spacing(1,1,1),Interpolation选择Bspline。2、图像预处理:重采样和标准化。

weixin_45011313的博客 3724

基于 PaddleHub 的 SpinalNet 宝石图像分类:模型架构、预测与 Fine-tune 实战指南

> **导读**:本文以仓库 [modules/image/classification/SpinalNet_Gemstones](https://link.gitcode.com/i/04f32a1a15f9921cacb11b997af27d41) 下的 spinalnet_res50_gemstone 模块为核心,系统讲解 SpinalNet 在宝石数据集上的预训练分类模型:从网络结构原理(

gitblog_00542的博客 696

从零到一:Silvaco中跨导曲线的自动化脚本实现

本文详细介绍了如何使用Python脚本在Silvaco中实现跨导曲线(gm曲线)的自动化分析,包括数据加载、跨导计算和结果可视化。通过自动化处理Id-Vg曲线,显著提升半导体器件工程师的工作效率,特别适用于工艺优化和DOE分析。文章还提供了批量处理和关键参数提取的高级技巧,帮助工程师快速掌握Silvaco脚本开发。

nn3456的博客 567

【深度学习-微调模型】使用Tensorflow Slim fine-tune(微调)模型

本文主要讲解在现有常用模型基础上,如何微调模型,减少训练时间,同时保持模型检测精度。 首先介绍下Slim这个Google公布的图像分类工具包,可在github链接:modules and examples built with tensorflow 中找到slim包。 上面这个链接目录下主要包含: official models(这个是用Tensorflow高层API做的例子模型集,建议初学...

c20081052的专栏 1万+

华为OD机试真题 新系统【网络数据包收发处理】

华为OD机试 新系统真题【网络数据包收发处理】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【网络数据包收发处理】多语言题解。

qq_45776114的博客 445

SST专题(2-2)MMC-SST 输入级的工作原理及数学模型

本文研究了MMC-SST和iMMC-SST的电路结构及工作原理。系统由前级MMC电路和后级DC/DC电路组成,MMC负责电能转换和能量存储,DC/DC电路进行电压电流调节。重点分析了半桥型子模块(SM)的开关组态和工作原理,建立了平均值模型,推导了上下桥臂电压方程和环流特性。研究表明,通过合理控制子模块充放电模态可维持端口电压平衡,上下桥臂电压调控可影响网侧功率吸收,而环流特性对中压直流侧电压具有重要影响。

嵌入式老牛的博客 773

PaddleHub 声音分类实战:panns_cnn10 预训练模型原理、API 预测与 Fine-tune 全指南

**导读**:本文围绕 PaddleHub 声音分类预训练模型 `panns_cnn10`,系统讲解其基于 PANNs 的 CNN10 网络结构、在 ESC50 数据集上的声音分类预测、基于 Google Audioset 527 类标签的 Tagging 预测,以及通过 PaddleHub Fine-tune API 进行声音分类微调与模型评估的完整流程。读完本文,你将掌握从模型安装、音频波形输

gitblog_00635的博客 359

基于Matlab的深度学习OFDM系统信号检测

在接收端,我们首先去除循环前缀,然后对接收到的信号进行FFT变换和QAM解调。在通信系统中,正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)是一种常用的调制技术,它可以将高速数据流分成若干个低速子载波进行传输,提高了信道利用率和抗干扰性能。接下来,我们使用训练好的神经网络对QAM调制后的数据进行检测,得到估计的FFT变换结果。深度学习方法可以通过大量的训练数据来学习信号的特征,并具有一定的适应能力,在某些情况下可能能够获得更好的检测性能。

2301_79325657的博客 296

大模型入门概念:详解AI大模型提示工程(prompt)、向量工程(embedding)、微调工程(fine-tune)

大家都在讨论大模型,似乎什么都可以与大模型结合,可当初学者也想上手时,却面临令人头大的词汇,Prompt、Embedding、Fine-tuning,怎么办呢?别担心,本文就用一种有趣的方式让大家认识它们。

Y525698136的博客 1355

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

迁移学习、fine-tune和局部参数恢复

参考:迁移学习——Fine-tune 一、迁移学习 就是把已训练好的模型参数迁移到新的模型来帮助新模型训练。 模型的训练与预测: 深度学习的模型可以划分为 训练 和 预测 两个阶段。 训练 分为两种策略:一种是白手起家从头搭建模型进行训练,一种是通过预训练模型进行训练。 预测 相对简单,直接用已经训练好的模型对数据集进行预测即可。 优点: 1)站在巨人的肩...

weixin_30256901的博客 618

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PaddleHub HRNet40 图像分类模型实战:从命令行预测到 Fine-tune 与 Serving 部署

本文以 PaddleHub 开源仓库中的 `hrnet40_imagenet` 图像分类模块([模块文档](https://link.gitcode.com/i/a87dcd5c99e5f713b4d45e5e228839b7))为核心,系统讲解 HRNet 高分辨率网络的模型结构、环境安装、命令行与 Python API 预测、基于 Flowers 数据集的 Fine-tune 全流程,以及 P

gitblog_01408的博客 554

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PaddleHub SpinalNet 宝石图像分类实践:VGG16 骨干模型的一键预测与 Fine-tune 完整指南

本文围绕开源仓库 PaddleFormers 中的 `spinalnet_vgg16_gemstone` 图像分类模块,系统讲解如何基于 PaddleHub 2.0 完成宝石图像识别:包括环境安装、预训练模型加载、`Predict` 预测 API 与命令行预测的使用,以及针对宝石数据集进行 Fine-tune 微调的完整五步流程。通过阅读本文,你将掌握 SpinalNet 网络结构的关键设计、`I

gitblog_00359的博客 419

PaddleFormers 中 ALBERT-Chinese-Small 预训练模型实战指南:安装、Fine-tune 预测与服务化部署

本指南围绕仓库 [modules/text/language_model/albert-chinese-small/README.md](https://link.gitcode.com/i/5f27f3b9603111fbcee1463d2cb92fbc) 展开,系统讲解 ALBERT-Chinese-Small 这一中文语义预训练模型在 PaddleFormers(基于 PaddlePaddl

gitblog_01140的博客 678

什么是微调(Fine Tune)?什么时候使用什么样的微调?【数据量和数据相似度决定】

目录 什么是模型微调? 为什么要微调? 什么情况下使用微调? 不同数据集下使用微调? 什么是模型微调? 为什么要微调? (1)从头开始训练,需要大量的数据,计算时间和计算资源。 (2)存在模型不收敛,参数不够优化,准确率低,模型泛化能力低,容易过拟合等风险。 什么情况下使用微调? (1)你要使用的数据集和预训练模型的数据集相似 (2)自己构建或使用的CNN模型正确率太低 (3)数据集相似但是数据集数量太少 (4)计算资源太少 ...

Drug discovery 1万+

详解AI大模型提示工程(prompt)、向量工程(embedding)、微调工程(fine-tune)

大家都在讨论大模型,似乎什么都可以与大模型结合,可当初学者也想上手时,却面临令人头大的词汇,Prompt、Embedding、Fine-tuning,怎么办呢?别担心,本文就用一种有趣的方式让大家认识它们。

AAI666666的博客 3148
上一篇: RAG实践指南:利用Ollama搭建本地知识库
下一篇: 大模型全解:本地部署和外部部署的区别
大模型应用场景
博客等级 码龄5年 7648粉丝 1350原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值