앙상블 CNN Jensen Inequality 평가 deepLearnging 파이썬 python

CNN 앙상블을 구성하고 평가하려면 test_ensemble.py라는 별도의 파일을 만들고 다음 코드를 삽입합니다.

2-9 행은 필요한 Python 패키지를 가져 오는 반면 12-15 행은 명령 줄 인수를 구문 분석합니다. 여기에는 직렬화 된 네트워크 가중치가 디스크에 저장되는 경로 인 –models가있는 단일 스위치 만 필요합니다.

여기에서 CIFAR-10 데이터 세트를 로드하여 네트워크를 평가할 뿐 (훈련이 아닌) 테스트 세트 만 유지할 수 있습니다

이제 Python에 내장 된 glob 모듈을 사용하여 쉽게 사전 훈련 된 MiniVGGNet 네트워크에 대한 경로를 수집해야합니다.

31 행은 –models 디렉토리의 모든 .model 파일에 대한 와일드 카드 경로 (파일 경로에 별표 “*”표시)를 구성합니다. 32 행에서 glob.glob을 사용하면 .model 파일 확장자로 끝나는 –models 내의 모든 파일 경로를 자동으로 찾을 수 있습니다.

32 행을 실행 한 후 modelPaths 목록에 다음 항목이 포함됩니다.

그런 다음 33 행은 디스크에서 로드 된 역 직렬화 된 MiniVGGNet 네트워크를 저장할 모델 목록을 초기화합니다. 이제 디스크에서 각 모델을로드 해 보겠습니다.

37 행에서는 각 개별 modelPath 파일 경로를 반복합니다. 그런 다음 load_model을 통해 직렬화 된 네트워크를 로드하고 모델 목록에 추가합니다. 마지막으로 앙상블을 평가할 준비가 되었습니다.

44 행에서 예측 목록을 초기화합니다. 모델 목록의 각 모델은 테스트 세트의 모든 데이터 포인트에 대해 10 개의 확률 (CIFAR-10 데이터 세트의 각 클래스 레이블에 대해 하나씩)을 생성합니다. CIFAR-10 데이터 세트에 10,000 개의 데이터 포인트가 있다고 가정하면 각 모델은 10,000×10 크기의 배열을 생성합니다. 각 행은 주어진 데이터 포인트에 해당하고 각 열은 해당 확률에 해당합니다.

이러한 예측을 누적하기 위해 47 행에서 각 개별 모델을 반복합니다. 그런 다음 테스트 데이터에서 .predict를 호출하고 각 모델에서 생성 된 확률로 예측 목록을 업데이트합니다. 앙상블의 5 개 모델을 반복하고 예측 목록을 업데이트 한 후, 예측 배열은 이제 (5, 10000, 10) 모양을 갖습니다. 즉, 각 모델에 대해 10 개의 클래스 레이블 확률을 생성 한 10,000 개의 테스트 데이터 포인트에 5 개의 모델이 있음을 의미합니다. 그런 다음 54 행은 5 개 모델 모두에서 각 테스트 데이터 포인트의 확률을 평균합니다.

이를 확인하기 위해 우리는 예측 배열의 모양을 보면 이제 (10000, 10) 5 개 모델 각각에 대한 확률이 함께 평균화 되었음을 의미합니다. 평균화는이 방법을 앙상블이라고 부르는 이유입니다. 여러 독립 모델의 출력을 가져 와서 함께 평균하여 최종 출력을 얻습니다. Jensen의 Inequality에 따르면 앙상블 방법을 적용하는 것은 개별 모델 중 하나를 무작위로 선택하는 것보다 (평균적으로) 더 나쁘지 않아야합니다.

마지막으로 55 행과 56 행은 앙상블 예측에 대한 분류 보고서를 표시합니다. MiniVGGNet 모델의 앙상블이 분류 정확도를 증가 시켰는지 확인하려면 다음 명령을 실행하십시오.

출력 분류 보고서를 보면 이러한 네트워크가 동일한 하이퍼 파라미터를 사용하여 동일한 데이터 세트에서 훈련되었지만 여러 네트워크의 출력을 결합하는 것만으로 정확도가 83 %에서 84 %로 증가했음을 알 수 있습니다. 일반적으로 데이터 세트에 따라 컨볼루션 신경망 앙상블을 적용 할 때 1-5 %의 정확도 증가를 기대할 수 있습니다.

이 장에서 우리는 앙상블 기계 학습 기술과 여러 개의 독립적 인 모델을 훈련 한 후 결과를 함께 평균화하여 분류 정확도를 높일 수있는 방법을 검토했습니다.

앙상블 방법에 대한 이론적 정당성은 Jensen의 Inequality 등을 검토하여 찾을 수 있습니다. Jensen의 Inequality는 평균적으로 무작위로 하나를 선택하는 것보다 여러 모델의 결과를 함께 평균하는 것이 좋다는 것입니다. 실제로 최첨단 논문 (Inception, ResNet 등 포함)에서 보고 한 상위 결과는 여러 모델의 평균입니다 (일반적으로 3-5개, 저자는 출판 기한 전에 네트워크를 훈련시켜야 하므로). 데이터 세트에 따라 일반적으로 정확도가 1~5 % 증가 할 것으로 예상 할 수 있습니다. 앙상블은 분류 정확도를 향상시키는 간단한 방법 일 수 있지만 단일 네트워크를 훈련하는 대신 계산 비용이 많이 드는 앙상블이지만 이제 N 개의 훈련을 할 수 있습니다. CNN 훈련은 이미 시간이 많이 걸리는 작업이므로 일부 상황에서는 선형으로 확장하는 방법이 실용적이지 않을 수 있습니다.

다중 모델 훈련의 계산 부담을 줄이기 위해 Huang et al. 2017 년 논문 Snapshot Ensembles : Train 1, get M for free에서 단일 학습 프로세스 동안 여러 모델을 학습하기 위해 순환 학습률 일정을 사용하는 아이디어를 제안합니다. 이 방법은 높은 학습률로 학습을 시작한다음 빠르게 낮추고 모델 가중치를 저장 한 다음 네트워크 가중치를 다시 초기화하지 않고 학습률을 원래 값으로 재설정하는 방식으로 작동합니다. 이 작업을 통해 네트워크는 훈련 과정 중에 이론적으로 지역 최소 영역 (또는 적어도 손실이 적은 영역)으로 커버리지를 여러 번 확장 할 수 있습니다. Snapshot Ensembles는 범위를 벗어나지만 분류 정확도를 높여야하지만 여러 모델을 교육 할 여유가 없는 경우 조사 할 가치가 있습니다.