본문 바로가기

데이터 과학/딥러닝 FrameWork

모델 앙상블(ensemble) 하기

학습이 잘된 몇가지 모델이 있고, 각각의 모델의 성능을 결합하여 최선의 결과를 얻고 싶을 때 모델 앙상블을 이용한다.

 

예시)

잘 학습된 가중치를 포함한 모델 1~3이 있다고 하자.

모델을 통해 추론한 결과는 (5000, 26) 사이즈를 갖는다고 가정해 보자.

모델 3개를 통해 추론한 결과를 앙상블 하는 과정은 다음과 같이 정리할 수 있다.

 

코드로 나타내면 다음과 같다. 

    for model in best_models:
        (...)
        for idx, sample in enumerate(test_data_loader):
            with torch.no_grad():
                (...)
                probs = model_bone(images)

                preds = (probs > 0.5)

                batch_idx = batch_size * idx
                # images.shape[0] 는 64. 즉, 배치 만큼만 채워 넣는다.
                prediction_array[batch_idx: batch_idx + images.shape[0], :] = preds.astype(int)
	
		predictions_list.append(prediction_array[..., np.newaxis])

    #  axis = 2를 기준으로 평균
    predictions_array = np.concatenate(predictions_list, axis = 2)
    predictions_mean = predictions_array.mean(axis = 2)

    # 평균 값이 0.5보다 클 경우 1 작으면 0
    predictions_mean = (predictions_mean > 0.5) * 1

 

앙상블을 잘만 활용해도 성능이 5% 이상은 높아질 수 있다.

 

-End-

반응형

'데이터 과학 > 딥러닝 FrameWork' 카테고리의 다른 글

torch_scatter 설치  (0) 2022.12.16
RNN & LSTM 설명 및 구현(pytorch)  (0) 2021.03.29
Trouble Shooting  (0) 2021.01.31
Torch 데이터셋 & 데이터 로더 + Transforms  (0) 2021.01.30
Torch 연산  (0) 2021.01.29