] [Pytorch modelo de carga pre-formados y la puesta a punto de la estructura de la red después modificado

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


De hecho, no aprender, a la espera de los Lakers vencieron a los Clippers juego


Pre-formados

Actualmente, existen tres formas de cargar el modelo de pre-formados:

  • La primera es modificar la capa de salida final totalmente conectado a la red;
  • El segundo modelo es la capa de red de la carga selectiva;
  • Un tercer método consiste en el trasplante directamente entrenado modelo de red trasplantado a nuestro propio modelo de red de ellos.
#导入头文件
from torch import nn
import torch
from torchvision import models
from torch.autograd import Variable
from torch import optim

método uno

#改变最后输出类别数
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)

Segundo método

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

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

método Tres

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)

Sintonia FINA

¿Cuándo y cómo poner a punto

Decidir cómo utilizar el factor de la migración tiene mucho que aprender, este es el más importante de los dos únicos: el tamaño del nuevo conjunto de datos, así como la similitud de los nuevos datos y el conjunto de datos original. Una cosa que hay que recordar: Antes de las capas de la red han aprendido es características universales, detrás de capas han aprendido se relaciona con el tipo de características. Aquí hay cuatro escenarios utilizados:

1. Los nuevos conjuntos de datos y son pequeñas y similar a la del conjunto de datos original. Debido a que el nuevo conjunto de datos es relativamente pequeña, si poner a punto puede ser un exceso de ajuste, y debido a que la recolección de datos antigua y la nueva forma similar, se espera un nivel similar de sus características, se puede utilizar como un extractor de características de red pre-formados, con las características extraídas de formación clasificador lineal.

2. Un conjunto de nuevos datos es grande y el conjunto de datos original y similares. Debido a que el nuevo conjunto de datos es lo suficientemente grande, puede ajustar con precisión toda la red.

3. Un conjunto de nuevos datos es pequeño y no es similar a la del conjunto de datos original. El nuevo conjunto de datos es pequeña, lo mejor es no poner a punto, y los conjuntos de datos originales no son similares, lo mejor es no usar las características de alto nivel. Sin embargo, esta vez usando las características de la capa frontal está capacitado clasificador SVM.

4. El nuevo conjunto de datos y los grandes conjuntos de datos originales y no es similar. Debido a que el nuevo conjunto de datos es lo suficientemente grande, puede re-entrenamiento. Pero en la práctica afinar el modelo de pre-formación es todavía útil. El nuevo conjunto de datos es lo suficientemente grande, toda la red puede estar bien-tine.

Publicado 44 artículos originales · ganado elogios 9 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/Jeremy_lf/article/details/104744809
Recomendado
Clasificación