답변:
신경 네트워크의 병목 현상은 뉴런이 적거나 그보다 아래 또는 위에있는 레이어입니다. 이러한 계층을 사용하면 네트워크가 사용 가능한 공간에 가장 적합하도록 기능 표현을 압축하여 교육 중 최고의 손실을 얻을 수 있습니다.
CNN (예 : Google의 Inception 네트워크)에는 병목 계층이 추가되어 네트워크의 기능 맵 (일명 "채널")의 수를 줄입니다. 그렇지 않으면 각 계층에서 증가하는 경향이 있습니다. 이것은 입력 채널보다 적은 출력 채널로 1x1 컨볼 루션을 사용함으로써 달성됩니다.
일반적으로 병목 현상 레이어의 가중치를 직접 계산하지는 않지만 교육 프로세스는 다른 모든 가중치와 마찬가지로이를 처리합니다. 병목 현상 계층에 적합한 크기를 선택하는 것은 잘 작동하는 네트워크 아키텍처를 찾기 위해 추측 한 다음 실험해야합니다. 여기서 목표는 일반적으로 새로운 이미지를 일반화하는 네트워크를 찾는 것입니다. 병목 현상 레이어는 네트워크의 매개 변수 수를 줄이면서 깊이를 유지하면서 많은 피쳐 맵을 나타낼 수 있도록 도와줍니다.
사전 훈련 된 모델의 마지막 레이어를 다시 계산한다고 가정합니다.
Input->[Freezed-Layers]->[Last-Layer-To-Re-Compute]->Output
[Last-Layer-To-Re-Compute] 를 훈련 시키려면 주어진 입력 데이터에 대해 [Freezed-Layers]의 출력을 여러 번 평가해야합니다 . 시간을 절약하기 위해 이러한 출력을 한 번만 계산할 수 있습니다 .
Input#1->[Freezed-Layers]->Bottleneck-Features-Of-Input#1
그런 다음 모든 병목 현상 특징 입력 번호 i를 저장 하고 직접 사용하여 [마지막 계층에서 다시 계산]을 학습합니다.
"image_retraining"예제의 "cache_bottlenecks"함수에 대한 설명 :
동일한 이미지를 여러 번 읽을 수 있기 때문에 (훈련 중에 왜곡이 적용되지 않은 경우) 사전 처리 중에 각 이미지에 대해 병목 현상 레이어 값을 한 번 계산 한 다음 캐시 된 값을 읽으면 작업 속도가 크게 향상 될 수 있습니다 훈련하는 동안 반복적으로.
Tensorflow 병목 현상은 실제 데이터 인식 교육을 시작하기 전의 마지막 사전 예측 단계입니다. 최종 트레이닝 단계가 수행 될 수 있고 트레이닝 재료에 사용 된 다른 모든 이미지와 이미지를 구별 할 수있는 각 트레이닝 이미지로부터 데이터 구조가 형성되는 단계이다. 이미지의 지문과 비슷합니다.
재 훈련 명령과 관련이 있으며 이름에서 알 수 있듯이 이것은 명령 실행의 주요 시간 소비자입니다. 이 병목 현상이 너무 많은 시간이 걸리면 훈련 자료의 양이 손상 될 수 있습니다.
명령 줄 명령이므로 정확한 알고리즘을 모릅니다. 알고리즘은 Github의 코드에서 공개적이지만 아마도 너무 복잡하여 (실행 시간이 정의에 따라 매우 길다) 나는이 유형의 답변으로 그것을 적을 수는 없다고 생각합니다.