首页 > 编程知识 正文

微调查一天能赚多少钱,微调鼻子需要多少钱

时间:2023-05-06 02:21:19 阅读:212311 作者:1701

文章目录 前言微调代码实现Reference

前言

在实际生产生活中所接触到的数据集,远不及ImageNet数据集中样本数的十分之一,这可能导致模型过拟合。同时,因为数据量有限,最终训练得到的模型的精度也达不到实用的要求。
为了应对上述问题,最切实可行的方式是应用迁移学习(transfer learning), j将从原数据集学到的知识迁移到目标数据集上。虽然ImageNet数据集的图像大多跟目标类无关,但在该数据集上训练的模型可以抽取较通用的图像特征,从而能够帮助识别边缘、纹理、形状和物体组成等。这些类似的特征对于识别目标类也可能同样有效。

微调

本博文将介绍迁移学习中的一种常用技术:微调(fine tuning)。如下图所示,微调由以下四步构成:

在源数据集(如ImageNet数据集)上预训练一个神经网络模型,即源模型。创建一个新的神经网络模型,即目标模型。它复制了源模型上除了输出层外的所有模型设计及其参数。我们假设这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。我们还假设源模型的输出层与源数据集的标签紧密相关,因此在目标模型中不予采用。为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。在目标数据集上训练目标模型。我们将从头训练输出层,而其余层的参数都是基于源模型的参数微调得到的。

当目标数据集远小于源数据集时,微调有助于提升模型的泛化能力。 代码实现 pretrained_net = models.resnet18(pretrained=True)pretrained_net.fc = nn.Linear(512, 2)output_params = list(map(id, pretrained_net.fc.parameters()))feature_params = filter(lambda p: id(p) not in output_params, pretrained_net.parameters()) lr = 0.01optimizer = optim.SGD([{'params': feature_params}, {'params': pretrained_net.fc.parameters(), 'lr': lr * 10}], lr=lr, weight_decay=0.001) Reference

fine-tuning

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。