제로 베이스 엔트리 CV 이벤트 - Task5 모델 통합

제로 베이스 엔트리 CV 이벤트 - Task5 모델 통합
  • 지식 포인트
  • 공통 통합 학습 방법
  • 고려 사항
  • 체험
  • 지식점
  • 통합 학습 방법
  • 딥러닝에서의 통합학습
  • 결과 후 처리 사고방식
  • 공통 통합 학습 방법
  • bagging VS randomforest(랜덤 숲)
  • boosting、adaboost 、GBDT
  • stacking

  • 집적 학습의 목적은 여러 개의 분류기를 구축하고 결합시켜 학습 임무를 완성하고 여러 개의 학습기의 결합을 통해 단일 학습기보다 더 좋은 범용 성능을 얻기 위한 것이다
    주의 사항
  • 집적학습은 어느 정도에 정밀도를 높일 수 있을 뿐 비교적 큰 훈련 시간을 소모할 수 있기 때문에 단일 모델의 정밀도를 높이고 집적학습 과정을 고려하는 것을 권장한다.
  • 구체적인 통합 학습 방법은 검증 집합 구분 방법과 결합해야 하며 Dropout과 TTA는 모든 장면에서 작용할 수 있다.

  • Dropout
    class SVHN_Model1(nn.Module):
        def __init__(self):
            super(SVHN_Model1, self).__init__()
                    
            model_conv = models.resnet18(pretrained=True)
            model_conv.avgpool = nn.AdaptiveAvgPool2d(1)
            model_conv = nn.Sequential(*list(model_conv.children())[:-1])
            self.cnn = model_conv
            
            self.fc1 = nn.Linear(512, 11)
            self.fc2 = nn.Linear(512, 11)
            self.fc3 = nn.Linear(512, 11)
            self.fc4 = nn.Linear(512, 11)
            self.fc5 = nn.Linear(512, 11)
        
        def forward(self, img):        
            feat = self.cnn(img)
            # print(feat.shape)
            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)
            return c1, c2, c3, c4, c5
    

    TTA
    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):
                    if use_cuda:
                        input = input.cuda()
                        
                    
                    c0, c1, c2, c3, c4 = model(input)
                    if use_cuda:
                        output = np.concatenate([
                            c0.data.cpu().numpy(), 
                            c1.data.cpu().numpy(),
                            c2.data.cpu().numpy(), 
                            c3.data.cpu().numpy(),
                            c4.data.cpu().numpy()], axis=1)
                    else:
                        output = np.concatenate([
                            c0.data.numpy(), 
                            c1.data.numpy(),
                            c2.data.numpy(), 
                            c3.data.numpy(),
                            c4.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
    

    체험
    이번에 코드랑 모형이랑 많이 뛰어서 사람이 망가졌는데 그 말이 CV에 잘 안 어울릴 것 같아요.

    좋은 웹페이지 즐겨찾기