] [Modèle Pytorch chargement pré-formation et la mise au point de la structure du réseau après modification

在实际工作或者学习当中,为了节省时间提高效率,我们在深度学习训练中,一般会使用已经训练好的开源模型(一般都是基于ImageNet数据集),但通常情况下我们自己涉及的模型和别人训练好的有很多地方不一样。 难道我们就没法用了吗?当然不是,我们可以有很多种方法去实现我们想要的。


En fait, ne pas apprendre, juste attendre que les Lakers ont battu le jeu Clippers


Pré-formation

Il existe actuellement trois façons de charger le modèle pré-formation:

  • La première consiste à modifier la couche de sortie final réseau connecté intégralement;
  • Le deuxième modèle est la couche de réseau du chargement sélectif;
  • Une troisième méthode consiste à modèle de réseau de transplantation formé directement transplanté à notre propre modèle de leur réseau.
#导入头文件
from torch import nn
import torch
from torchvision import models
from torch.autograd import Variable
from torch import optim

Une méthode

#改变最后输出类别数
transfer_model = models.resnet18(pretrained=True)

dim_in = transfer_model.fc.in_features
transfer_model.fc = nn.Linear(dim_in,10) #img_class =10
#print(transfer_model)

méthode Deux

for param in transfer_model.parameters():
    param.requires_grad = False

optimizer = optim.SGD(transfer_model.fc.parameters(),lr=1e-3)
#为了加快效率,我们只在优化器中更新全连接部分中的参数

méthode Trois

resnet50 = models.resnet50(pretrained=True)#加载model
cnn = CNN(Bottleneck, [3, 4, 6, 3])#自定义网络

#读取参数
pretrained_dict = resnet50.state_dict()
model_dict = cnn.state_dict()

# 将pretrained_dict里不属于model_dict的键剔除掉
pretrained_dict =  {k: v for k, v in pretrained_dict.items() if k in model_dict}

# 更新现有的model_dict
model_dict.update(pretrained_dict)

# 加载我们真正需要的state_dict
cnn.load_state_dict(model_dict)

# print(resnet50)
print(cnn)

Réglage fin

Quand et comment Peaufinez

Décider comment utiliser le facteur de migration a beaucoup à apprendre, c'est le plus important que deux: la taille du nouvel ensemble de données, ainsi que la similitude des nouvelles données et l'ensemble de données d'origine. Une chose que nous devons nous rappeler: avant que les couches de réseau ont appris les traits caractéristiques universelles, derrière des couches ont appris est lié au type de caractéristiques. Voici quatre scénarios utilisés:

1. De nouveaux ensembles de données et sont de petite taille et similaire à l'ensemble de données d'origine. Étant donné que le nouvel ensemble de données est relativement faible, si-tune amende peut être surajustement, et parce que l'ancienne et la nouvelle collecte de données De même, nous nous attendons à un niveau similaire de leurs caractéristiques, peut être utilisé comme une fonction réseau pré-formé extracteur, avec les caractéristiques extraites de formation classificateurs linéaires.

2. Une nouvelle série de données est importante et l'ensemble et même de données d'origine. Étant donné que le nouvel ensemble de données est assez grand, vous pouvez affiner l'ensemble du réseau.

3. Une nouvelle série de données est faible et ne ressemble pas à l'ensemble de données d'origine. Le nouvel ensemble de données est faible, il est préférable de ne pas affiner, et les ensembles de données d'origine ne sont pas similaires, il est préférable de ne pas utiliser les fonctionnalités de haut niveau. Cependant, cette fois en utilisant les caractéristiques de la couche avant est formé classificateur SVM.

4. Les nouvelles données établies et les ensembles et ne sont pas semblables données à grande origine. Étant donné que le nouvel ensemble de données est assez grand, vous pouvez re-formation. Mais in fine-tune pratique, le modèle de pré-formation est toujours utile. Le nouvel ensemble de données est assez grand, l'ensemble du réseau peut être bien à dents.

Publié 44 articles originaux · a gagné les éloges 9 · vues 10000 +

Je suppose que tu aimes

Origine blog.csdn.net/Jeremy_lf/article/details/104744809
conseillé
Classement