视频模板网站推荐,天津 app开发公司,网站第三方统计代码,成都系统定制一、微调#xff1a;迁移学习#xff08;transfer learning#xff09;将从源数据集学到的知识迁移到目标数据集。
二、步骤
1、在源数据集#xff08;例如ImageNet数据集#xff09;上预训练神经网络模型#xff0c;即源模型。
2、创建一个新的神经网络模型#xff…一、微调迁移学习transfer learning将从源数据集学到的知识迁移到目标数据集。
二、步骤
1、在源数据集例如ImageNet数据集上预训练神经网络模型即源模型。
2、创建一个新的神经网络模型即目标模型。这将复制源模型上的所有模型设计及其参数输出层除外。
3、向目标模型添加输出层其输出数是目标数据集中的类别数。然后随机初始化该层的模型参数。
4、在目标数据集如椅子数据集上训练目标模型。输出层将从头开始进行训练而所有其他层的参数将根据源模型的参数进行微调。
5、目标数据集比源数据集小得多时微调有助于提高模型的泛化能力。就相当于在别人训练好的基础上训练 三、网络架构神经网络一般分为两块特征抽取将原始像素变成容易线性分割的特征和线性分类器
四、训练
1、微调是在目标数据集上的正常训练任务但使用更强的正则化有更强的lr和更少的epoch
2、源数据集远复杂于目标数据通常微调效果会更好
3、源数据集中可能也有目标数据中的部分标号
4、固定底层训练高层 五、总结
1、迁移学习将从源数据集中学到的知识迁移到目标数据集微调是迁移学习的常见技巧。
2、除输出层外目标模型从源模型中复制所有模型设计及其参数并根据目标数据集对这些参数进行微调。但是目标模型的输出层需要从头开始训练。
3、通常微调参数使用较小的学习率而从头开始训练输出层可以使用更大的学习率。 六、代码
1、导入数据
train_imgs torchvision.datasets.ImageFolder(os.path.join(data_dir, train))
test_imgs torchvision.datasets.ImageFolder(os.path.join(data_dir, test))hotdogs [train_imgs[i][0] for i in range(8)]
not_hotdogs [train_imgs[-i - 1][0] for i in range(8)]# 使用RGB通道的均值和标准差以标准化每个通道
normalize torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])train_augs torchvision.transforms.Compose([torchvision.transforms.RandomResizedCrop(224),torchvision.transforms.RandomHorizontalFlip(),torchvision.transforms.ToTensor(),normalize])test_augs torchvision.transforms.Compose([torchvision.transforms.Resize([256, 256]),torchvision.transforms.CenterCrop(224),torchvision.transforms.ToTensor(),normalize])
2、定义和初始化模型
pretrained_net torchvision.models.resnet18(pretrainedTrue)finetune_net torchvision.models.resnet18(pretrainedTrue)
#最后一层类别为2
finetune_net.fc nn.Linear(finetune_net.fc.in_features, 2)
nn.init.xavier_uniform_(finetune_net.fc.weight);
3、微调模型
# 如果param_groupTrue输出层中的模型参数将使用十倍的学习率
def train_fine_tuning(net, learning_rate, batch_size128, num_epochs5,param_groupTrue):train_iter torch.utils.data.DataLoader(torchvision.datasets.ImageFolder(os.path.join(data_dir, train), transformtrain_augs),batch_sizebatch_size, shuffleTrue)test_iter torch.utils.data.DataLoader(torchvision.datasets.ImageFolder(os.path.join(data_dir, test), transformtest_augs),batch_sizebatch_size)devices d2l.try_all_gpus()loss nn.CrossEntropyLoss(reductionnone)if param_group:params_1x [param for name, param in net.named_parameters()if name not in [fc.weight, fc.bias]]trainer torch.optim.SGD([{params: params_1x},{params: net.fc.parameters(),lr: learning_rate * 10}],lrlearning_rate, weight_decay0.001)else:trainer torch.optim.SGD(net.parameters(), lrlearning_rate,weight_decay0.001)d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs,devices)