[Registro de aprendizaje de DataWhale 13-02] Integración del modelo de competencia-Tarea05 de CV introductorio de base cero

1. Método de integración del modelo

El aprendizaje integrado en el aprendizaje automático puede mejorar la precisión de las predicciones hasta cierto punto. Los métodos de aprendizaje integrados comunes incluyen el apilamiento, el empaquetado y el refuerzo. Al mismo tiempo, estos métodos de aprendizaje integrados están estrechamente relacionados con la división de conjuntos de verificación específicos.

Para la introducción de métodos de integración de modelos comunes, como ensacado, refuerzo y apilado, consulte la siguiente dirección
https://www.jiqizhixin.com/articles/2019-05-15-15

Dado que los modelos de aprendizaje profundo generalmente requieren un período de capacitación prolongado, si el dispositivo de hardware no lo permite, se recomienda seleccionar el método de configuración. Si necesita buscar precisión, puede usar el método de validación cruzada.

Lo siguiente supone que se construye una validación cruzada de 10 veces y se entrenan 10 modelos de CNN.
Inserte la descripción de la imagen aquí
Entonces los 10 modelos de CNN se pueden integrar de la siguiente manera:

El valor de probabilidad del resultado predicho se promedia y luego se decodifica en un carácter específico;
el carácter predicho se vota para obtener el carácter final.

2. Aprendizaje integrado en el aprendizaje profundo

  • 2.1 Abandono El
    abandono se puede utilizar como una técnica para entrenar redes neuronales profundas. En cada lote de entrenamiento, una parte de los nodos se detiene al azar. Al mismo tiempo, deje que todos los nodos desempeñen su papel en el proceso de predicción.Inserte la descripción de la imagen aquí

Para el análisis del principio de deserción, consulte: https://zhuanlan.zhihu.com/p/38200980

El abandono suele aparecer en la red anterior de CNN, lo que puede aliviar eficazmente el sobreajuste del modelo y también puede aumentar la precisión del modelo durante la predicción.

La estructura de la red después de unirse a Dropout es la siguiente:

# 定义模型
class SVHN_Model1(nn.Module):
    def __init__(self):
        super(SVHN_Model1, self).__init__()
        # CNN提取特征模块
        self.cnn = nn.Sequential(
            nn.Conv2d(3, 16, kernel_size=(3, 3), stride=(2, 2)),
            nn.ReLU(),
            nn.Dropout(0.25),
            nn.MaxPool2d(2),
            nn.Conv2d(16, 32, kernel_size=(3, 3), stride=(2, 2)),
            nn.ReLU(), 
            nn.Dropout(0.25),
            nn.MaxPool2d(2),
        )
        # 
        self.fc1 = nn.Linear(32*3*7, 11)
        self.fc2 = nn.Linear(32*3*7, 11)
        self.fc3 = nn.Linear(32*3*7, 11)
        self.fc4 = nn.Linear(32*3*7, 11)
        self.fc5 = nn.Linear(32*3*7, 11)
        self.fc6 = nn.Linear(32*3*7, 11)
    
    def forward(self, img):        
        feat = self.cnn(img)
        feat = feat.view(feat.shape[0], -1)
        c1 = self.fc1(feat)
        c2 = self.fc2(feat)
        c3 = self.fc3(feat)
        c4 = self.fc4(feat)
        c5 = self.fc5(feat)
        c6 = self.fc6(feat)
        return c1, c2, c3, c4, c5, c6
  • 2.2
    El aumento del tiempo de prueba (TTA) también es una técnica de aprendizaje integrada de uso común. El aumento de datos se puede usar no solo durante el entrenamiento, sino también durante la predicción. La misma muestra se predice tres veces. Luego, promedia los tres resultados.
def predict(test_loader, model, tta=10):
   model.eval()
   test_pred_tta = None
   # TTA 次数
   for _ in range(tta):
       test_pred = []
   
       with torch.no_grad():
           for i, (input, target) in enumerate(test_loader):
               c0, c1, c2, c3, c4, c5 = model(data[0])
               output = np.concatenate([c0.data.numpy(), c1.data.numpy(),
                  c2.data.numpy(), c3.data.numpy(),
                  c4.data.numpy(), c5.data.numpy()], axis=1)
               test_pred.append(output)
       
       test_pred = np.vstack(test_pred)
       if test_pred_tta is None:
           test_pred_tta = test_pred
       else:
           test_pred_tta += test_pred
   
   return test_pred_tta

3. Ideas de posprocesamiento

Puede haber diferentes soluciones en diferentes tareas.Los modelos de diferentes ideas no solo pueden aprender unos de otros, sino que también pueden modificar los resultados finales de la predicción.

En esta pregunta, los resultados de la predicción se pueden posprocesar a partir de las siguientes ideas:

  • Cuente la frecuencia de caracteres en cada posición de la imagen y use reglas para modificar los resultados;
  • Entrene un modelo de predicción de longitud de caracteres por separado para predecir la cantidad de caracteres en la imagen y corregir el resultado.

Supongo que te gusta

Origin blog.csdn.net/qq_40463117/article/details/106497912
Recomendado
Clasificación