AlexNet definition 인공지능 #딥러닝 #기계학습 AI DeepLearning HDF5 python

이제 Krizhevsky et al.의 중요한 AlexNet 아키텍처를 구현해 보겠습니다. AlexNet 아키텍처를 요약 한 표는 아래 표에서 볼 수 있습니다.

AlexNet 아키텍처의 표 요약입니다. 출력 볼륨 크기는 관련되는 경우 컨볼 루션 필터 크기 / 풀 크기와 함께 각 레이어에 포함됩니다.

입력 이미지가 227 × 227 × 3 픽셀로 가정되는 방식에 주목하십시오. 이것은 실제로 AlexNet의 올바른 입력 크기입니다. 29 장에서 언급했듯이, 원래 출판물에서 Krizhevsky et al. 입력 공간 크기가 224x224x3이라고 보고했습니다. 그러나 11×1 커널로 타일링하면 224×224가 불가능하다는 것을 알기 때문에 출판물에 오타가있을 가능성이 있으며 224×224는 실제로 227×227이어야합니다.

AlexNet의 첫 번째 블록은 stride가 4×4 인 96, 11×11 커널을 적용한 다음 풀 크기가 3×3이고 stride가 2×2 인 RELU 활성화 및 최대 풀링을 적용하여 57 × 57 크기의 출력 볼륨을 생성합니다.

그런 다음 두 번째 CONV => RELU => POOL 레이어를 적용합니다. 이번에는 1×1 스트라이드의 256, 5×5 필터를 사용합니다. 풀 크기가 3×3이고 보폭이 2×2 인 최대 풀링을 다시 적용하면 13×13 볼륨이 남습니다.

다음으로 (CONV => RELU) * 3 => POOL을 적용합니다. 처음 두 개의 CONV 레이어는 384, 3×3 필터를 학습하고 최종 CONV는 256, 3×3 필터를 학습합니다.

또 다른 최대 풀링 작업 후에는 각각 4096 개의 노드와 RELU 활성화가있는 두 개의 FC 계층에 도달합니다. 네트워크의 마지막 계층은 소프트 맥스 분류기입니다. AlexNet이 처음 도입되었을 때 배치 정규화와 같은 기술이 없었습니다. 구현시 Convolutional Neural Networks를 사용하는 대부분의 이미지 분류 작업에 대한 표준과 같이 활성화 후 배치 정규화를 포함 할 것입니다. 또한 과적 합을 줄이기 위해 각 POOL 작업 후 매우 적은 양의 드롭 아웃을 포함 할 것입니다. AlexNet을 구현하기 위해 pyimagesearch에서 nn의 conv 하위 모듈에 alexnet.py라는 새 파일을 생성하겠습니다.

여기에서 alexnet.py를 열고 다음과 같은 중요한 아키텍처를 구현할 것입니다

2-11 행은 필수 Keras 클래스를 가져옵니다. 이전에 이 책의 이전 장에서 이러한 모든 레이어를 사용했으므로 각 레이어에 대해 명시 적으로 설명하지 않겠습니다. 제가 주목하고 싶은 유일한 import l2 함수를 가져 오는 10행 입니다.이 방법은 L2 가중치 감쇄를 네트워크의 가중치 레이어에 적용하는 역할을 합니다. import가 처리되었으므로 AlexNet의 정의를 시작하겠습니다.

15 행은 AlexNet의 빌드 방법을 정의합니다. 이 책의 모든 이전 예제와 마찬가지로 실제 네트워크 아키텍처를 구성하고이를 호출 함수로 반환하려면 build 메서드가 필요합니다. 이 메서드는 입력 이미지의 너비, 높이, 깊이와 데이터 세트의 총 클래스 레이블 수의 네 가지 인수를받습니다. 선택적 매개 변수 인 reg는 네트워크에 적용 할 L2 정규화의 양을 제어합니다. 더 크고 심층적 인 네트워크의 경우 정규화를 적용하는 것은 유효성 검사 및 테스트 세트의 정확도를 높이면서 과적합을 줄이는 데 중요합니다.

18 행은 “channels last”순서를 사용한다고 가정하고 inputShape 및 채널 차원과 함께 모델 자체를 초기화합니다. 대신 “channels first”순서를 사용하는 경우 inputShape 및 chanDim을 업데이트합니다 (24 ~ 26 행).

이제 네트워크에 설정된 첫 번째 CONV => RELU => POOL 레이어를 정의하겠습니다.

첫 번째 CONV 레이어는 4×4의 보폭을 사용하여 크기가 11×11 (28 및 29행) 인 96 개의 필터를 학습합니다. kernel_regularizer 매개 변수를 Conv2D 클래스에 적용하면 L2 가중치 정규화 매개 변수를 적용 할 수 있습니다. 이 정규화는 네트워크의 모든 CONV 및 FC 계층에 적용됩니다.

CONV 후에 ReLU 활성화가 적용되고 BatchNormalization (32 및 33 행)이 이어집니다. MaxPooling2D는 공간 차원을 줄이기 위해 적용됩니다 (34 행). 또한 과적 합을 줄이기 위해 작은 확률 (25 %)로 드롭 아웃을 적용 할 것입니다 (35 행). 다음 코드 블록은 또 다른 CONV => RELU => POOL 계층 집합을 정의하며 이번에는 크기가 각각 5×5 인 256 개의 필터를 학습합니다.

POOL 작업을 적용하기 전에 여러 CONV => RELU를 함께 스택하는 AlexNet의 세 번째 블록에서 더 깊고 풍부한 기능을 학습합니다.

처음 두 개의 CONV 필터는 384, 3×3 필터를 학습하고 세 번째 CONV는 256, 3×3 필터를 학습합니다. 다시 말하지만, 파괴적인 POOL 레이어를 적용하기 전에 여러 CONV => RELU 레이어를 쌓아두면 네트워크가 더 풍부하고 잠재적으로 더 차별적 인 기능을 배울 수 있습니다.

거기에서 우리는 완전히 연결된 2 개의 레이어 (각각 4096 노드)를 사용하여 다차원 표현을 표준 피드 포워드 네트워크로 축소합니다.

배치 정규화는 위의 CONV 계층에서와 같이 FC 계층 집합에서 각 활성화 후에 적용됩니다. 대부분의 CNN에서 표준처럼 모든 FC 레이어 세트 이후에 50 %의 더 큰 확률로 드롭 아웃이 적용됩니다. 마지막으로 원하는 클래스 수를 사용하여 소프트 맥스 분류기를 정의하고 결과 모델을 호출 함수로 반환합니다.

보시다시피 AlexNet 구현은 특히 위의 표에 제시된 아키텍처를 보면 매우 간단한 프로세스입니다. 간행물에서 아키텍처를 구현할 때마다 구현이 훨씬 쉬워지는 표를 확인하세요. 자체 네트워크 아키텍처의 경우 네트워크 아키텍처 시각화에 대한 20 장을 내용을 고려하여 입력 볼륨 및 출력 볼륨 크기가 예상 한대로 되도록 하십시오.