赞
踩
1、迁移学习:把已经训练好的模型参数,迁移到新的模型,来帮助新的模型训练。
步骤:网络→大数据集→模型→模型微调→新数据集→新模型。
2、冻结:被冻结的层可以前向传播,也可以反向传播,只是自己这一层的参数不更新,其他未冻结层的参数正常更新。
3、正则化:这里使用BatchNorm,对该层每个节点的这m个输出进行归一化再输出。
肺部感染识别,使用resnet50模型
def get_model(): model_pre = models.resnet50(pretrained=True) #获取预训练模型 #冻结与训练模型中所有的参数 for param in model_pre.parameters(): param.requires_grad = False #微调模型:替换ResNet最后的两层网络,返回一个新的模型 model_pre.avgpool = AdaptiveCancatPool2d() #池化层的替换 model_pre.fc = nn.Sequential( nn.Flatten(), #所有维度拉平 nn.BatchNorm1d(4096), #正则化 256X6X6 nn.Dropout(0.5), #丢掉一些神经元 nn.Linear(4096,512), #线性层的处理 nn.ReLU(), nn.BatchNorm1d(512), nn.Linear(512,2), #二分类 nn.LogSoftmax(dim=1) #损失函数 ) return model_pre #更改池化层 class AdaptiveCancatPool2d(nn.Module): def __init__(self,size=None): #size表示卷积核大小 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): # 返回两个池化层的连接 return torch.cat([self.pool_one(x),self.pool_two(x),1]) # 1表示维度,纵向的连接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。