첫 번째 컨볼루션 레이어 1, 컨볼루션 커널 수는 96개, 두 번째 컨볼루션 레이어 2, 컨볼루션 수는 256, 세 번째 컨볼루션 레이어 3, 입력은 두 번째 레이어의 출력, 컨볼루션 커널 수 컨볼루션의 네 번째 레이어는 4이고, 컨볼루션 커널의 수는 384이고, 컨볼루션의 다섯 번째 레이어는 5이고, 입력은 네 번째 레이어의 출력이고, 컨볼루션 커널의 수는 256입니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, Dell G3 컴퓨터.
AlexNet 네트워크는 2012년 ImageNet 대회 챔피언인 Hinton과 그의 학생 Alex Krizhevsky가 설계했습니다. 그해 이후에는 뛰어난 vgg 및 GoogleLeNet과 같은 더 많고 더 깊은 신경망이 제안되었습니다. 공식적으로 제공되는 데이터 모델의 정확도는 57.1%에 달하며 상위 1~5위는 80.2%에 이릅니다. 이는 기존의 기계 학습 분류 알고리즘에 비해 이미 상당히 뛰어난 수준입니다. 그림은 두 개의 GPU 서버를 사용하는 caffe의 alexnet 네트워크 구조를 보여 주므로 두 개의 흐름도를 볼 수 있습니다. AlexNet의 네트워크 모델은 다음과 같이 해석됩니다.
은 다음과 같이 해석됩니다.
第一层:卷积层1,输入为 224×224×3 224 \times 224 \times 3224×224×3的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11×11×3 11 \times 11 \times 311×11×3; stride = 4, stride表示的是步长, pad = 0, 表示不扩充边缘;卷积后的图形大小是怎样的呢? wide = (224 + 2 * padding - kernel_size) / stride + 1 = 54height = (224 + 2 * padding - kernel_size) / stride + 1 = 54dimention = 96然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最终获得第一层卷积的feature map最终第一层卷积的输出为 第二层:卷积层2, 输入为上一层卷积的feature map, 卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为:5×5×48 5 \times 5 \times 485×5×48; pad = 2, stride = 1; 然后做 LRN, 最后 max_pooling, pool_size = (3, 3), stride = 2; 第三层:卷积3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3×3×256 3 \times 3 \times 2563×3×256), padding = 1, 第三层没有做LRN和Pool 第四层:卷积4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3×3 3 \times 33×3), padding = 1, 和第三层一样,没有LRN和Pool 第五层:卷积5, 输入为第四层的输出,卷积核个数为256, kernel_size = (3×3 3 \times 33×3), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2;第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,因为上面介绍过,ImageNet这个比赛的分类个数为1000。全连接层中使用了RELU和Dropout。caffe의 자체 그리기 도구(caffe/python/draw_net.py) 및 caffe/models/bvlc_alexnet/ 아래의 train_val을 사용합니다. prototxt로 그린 네트워크 구조 다이어그램은 다음과 같습니다.
python3 draw_net.py --rankdir TB ../models/bvlc_alexnet/train_val.prototxt AlexNet_structure.jpg알고리즘 혁신 포인트 (1) ReLU를 CNN의 활성화 함수로 성공적으로 사용했으며, 심층 네트워크에서 그 효과가 Sigmoid를 초과하는 것을 확인했습니다. 네트워크가 깊을 때 Sigmoid의 그래디언트 분산 문제를 성공적으로 해결했습니다. ReLU 활성화 함수는 오래 전에 제안되었지만 AlexNet이 등장하고 나서야 본격적으로 추진되었습니다. (2) 모델 과적합을 방지하기 위해 Dropout을 사용하여 훈련 중에 일부 뉴런을 무작위로 무시합니다. Dropout에 대해서는 별도의 논문에서 논의한 바 있지만 AlexNet은 이를 실용화하고 실습을 통해 그 효과를 확인했습니다. AlexNet에서 Dropout은 주로 마지막 몇 개의 완전 연결 레이어에서 사용됩니다. (3) CNN에서 중첩 최대 풀링을 사용합니다. 이전에는 CNN에서 평균 풀링이 일반적으로 사용되었으며 AlexNet은 평균 풀링의 흐림 효과를 피하기 위해 모두 최대 풀링을 사용했습니다. 또한 AlexNet은 풀링 커널의 크기보다 단계 길이가 작아서 풀링 계층의 출력 간에 중첩 및 적용 범위가 있어 기능의 풍부함이 향상될 것을 제안합니다.
(4)는 로컬 뉴런의 활동에 대한 경쟁 메커니즘을 생성하여 응답이 클수록 값이 상대적으로 커지도록 하고, 피드백이 작을수록 다른 뉴런을 억제하여 모델의 일반화 능력을 향상시키는 LRN 계층을 제안했습니다.
(5) 다중 GPU 훈련은 네트워크 훈련의 규모를 늘릴 수 있습니다. (6) 백만 레벨 ImageNet 데이터 이미지 입력 AlexNet에는 세 가지 데이터 확대 방법이 있습니다.
번역 변환(자르기); 반사 변환(뒤집기);
조명 및 색상 변환(색상 지터링): 먼저 그림을 무작위로 변환한 다음 수평으로 뒤집습니다. 테스트할 때 먼저 왼쪽 위, 오른쪽 위, 왼쪽 아래에서 5개의 변환 변환을 수행합니다. 오른쪽 하단과 중간을 뒤집은 후 결과를 평균화합니다.
ReLU 활성화 기능을 사용하여 과적합을 방지합니다.
데이터 확대를 사용합니다. 데이터 세트 강화(데이터 증대)
이미지 수평 뒤집기, 무작위 자르기, 변환 변환, 색상 변환, 조명 변환 등 학습에 여러 GPU 사용LRN 로컬 정규화 사용
겹침 풀링(3*3 풀링 코어)을 사용합니다.
Caffe 프레임워크에서의 훈련
칼럼을 방문해주세요!
위 내용은 Alexnet 네트워크 구조에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!