赞
踩
目录
迁移学习是一种机器学习技术,迁移学习是指利用已经训练好的模型,在新的任务上进行微调。迁移学习可以加快模型训练速度,提高模型性能,并且在数据稀缺的情况下也能很好地工作。
原理是在一个或多个源领域(source domain)上学习到的知识、模型、特征、参数等,迁移到一个或多个目标领域(target domain)上,以提高目标领域上的学习性能。
具体来说,迁移学习的原理包括两个关键概念:源领域和目标领域。源领域是指已经学习到的领域,可以是一个或多个。目标领域是指要进行学习的领域,也可以是一个或多个。
在迁移学习中,我们通过将源领域上的知识、模型、特征等应用到目标领域上,来提高目标领域上的学习性能。这个过程可能会涉及到一些技术,如特征提取、模型迁移、领域自适应等。
总之,迁移学习的原理就是通过利用已有的知识和数据,来加速新任务的学习过程,从而改善学习性能
通常,我们会选择在大规模图像数据集(如mageNet) 上预训练的模型,如VGG、ResNet等。然后,根据新数据集的特点,选择需要微调的模型层。对于低级特征的任务(如边缘检测》,最好使用浅层模型的层,而对于高级特征的任务(如分类),则应选择更深层次的模型。
保持预训练模型的权重不变,只训练新增加的层或者微调一些层,避免因为在数据集中过拟合导致预训练模
型过度拟合。
在冻结预训练模型的参数情况下,训练新增加的层。这样,可以使新模型适应新的任务,从而共得更高的性能。
在新层上进行训练后,可以解冻一些已经训练过的层,并且将它们作为微调的目标。这样做可以提高模型在新数据集上的性能。
在训练完成之后,使用测试集对模型进行评估。如果模型的性能仍然不够好,可以尝试调整超参数或者更改微调层.
resnet_model = models.resnet18(weights=models.ResNet18_Weights.DEFAULT)
weights=models.ResNet18_Weights.DEFAULT表示使用在 ImageNet 数据集上预先训练好的权重来初始化模型参数
- for param in resnet_model.parameters():
- param.requires_grad = False
模型所有参数(即权重和偏差)的requires_grad属性设置为False,从而冻结所有模型参数
- in_features = resnet_model.fc.in_features # 获取模型原输入的特征个数
- resnet_model.fc = nn.Linear(in_features, 20) # 创建一个全连接层,输入特征为in_features,输出为20
这里输出20要根据实际数据而定
- params_to_update = [] # 保存需要训练的参数,仅仅包含全连接层的参数
- for param in resnet_model.parameters():
- if param.requires_grad == True:
- params_to_update.append(param)
- resnet_model = models.resnet18(weights=models.ResNet18_Weights.DEFAULT)
- # weights=models.ResNet18_Weights.DEFAULT表示使用在 ImageNet 数据集上预先训练好的权重来初始化模型参数
- for param in resnet_model.parameters():
- param.requires_grad = False
- # 模型所有参数(即权重和偏差)的requires_grad属性设置为False,从而冻结所有模型参数,
- in_features = resnet_model.fc.in_features # 获取模型原输入的特征个数
- resnet_model.fc = nn.Linear(in_features, 20) # 创建一个全连接层,输入特征为in_features,输出为20
-
- params_to_update = [] # 保存需要训练的参数,仅仅包含全连接层的参数
- for param in resnet_model.parameters():
- if param.requires_grad == True:
- params_to_update.append(param)
- # 模型要指定resnet模型,如果指定cpu或gpu的话,要将resnet模型传入
- model = resnet_model.to(device)
- # 仅训练需要更新的参数
- optimizer = torch.optim.Adam(params_to_update, lr=0.001)
剩下的根据神经网络代码正常编写即可
可以看出,使用迁移学习的方法,正确率(accuracy)明显提高
我这里训练集比较少,如果训练的样本数量集很大,训练时间也会明显缩短
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。