‘블록과 함께 하는 파이썬 딥러닝 케라스’ 세미나 5

이번 세미나에서는 ‘3부 레이어 개념 잡기’의 3장에서 5장까지 다룹니다.

 

3장에서 5장을 읽고 컨볼루션 신경망에 대해서 이해하고 구현합니다.

p112. 컨볼루션 신경망은 다충 퍼셉트론 신경망과 매우 유사하나 이미지가 가지고 있는 특성이 고려되어 설계된 신경망이기에 영상 처리에 주로 사용된다. 컨볼루션 신경망 모델의 주요 레이어는 컨볼루션 레이어, 맥스풀링 레이어, 플래튼 레이어이다.

 

3.1 필터로 특징을 뽑아주는 컬볼루션 레이어

p112~113. Conv2D 레이어는 영상 인식에 주로 사용하며, 필터가 탑재되어 있다. 주요 인자는 다음과 같다.

  • filters: 필터 수
  • kernel_size: 커널의 (행, 열)
  • padding: 경계 처리 방법을 정의한다.
    • ‘valid’: 유요한 영역만 출력, 출력 이미지 사이즈는 입력 이미지 사이즈보다 작다. 깊은 층을 가진 모델인 경우 특징 맵이 계속 작아져서 정보가 많이 손실된다.
    • ‘same’: 출력 이미지 사이즈가 입력 이미지 사이즈와 동일하다. 입력 이미지에 경계를 학습시키는 효과가 있다.
  • input_shape: 샘플 수를 제외한 입력 형태를 정의한다. (행, 열, 채널 수)로 정의, 채널은 흑백영상인 경우 1, 컬러영상인 경우 3으로 설정한다.
  • activation: 활성화 함수를 설정

입력 형태는 image_data_format이 ‘chnnels_first’인 경우 (샘플 수, 채널 수, 행, 열)로 이루어진 4D 텐서이고, image_data_format이 ‘chnnels_last’인 경우 (샘플 수, 행, 열, 채널 수)로 이루어진 4D 텐서이다.  image_data_format 옵션은 keras.json 파일 안에 있는 설정이다.

출력 형태는 image_data_format이 ‘chnnels_first’인 경우 (샘플 수, 필터 수, 행, 열)로 이루어진 4D 텐서이고, image_data_format이 ‘chnnels_last’인 경우 (샘플 수, 행, 열, 필터 수)로 이루어진 4D 텐서이다.  image_data_format 옵션은 keras.json 파일 안에 있는 설정이다.

p113. 필터는 가중치를 의미한다. 하나의 필터가 입력 이미지를 순회하면서 적용된 결과값을 모으면 출력 이미지가 생성된다.

  • 동일한 가중치 사용 – 파라미터 공유, 학습해야 할 가중치 수를 현저하게 줄여준다. 위치에 무관하게 특징을 추출할 수 있다.
  • 출력에 영향을 미치는 영역이 지역적으로 제한되어 있다. 지역적인 특징을 잘 뽑아내게 되어 영상 인식에 적합하다.

p116~118. 필터 마다 고유한 특징을 뽑아 고유한 출력 이미지를 만들어 내야 하기 때문에 필터의 수와 출력 이미지 수가 같다.

채널의 다수인 경우 채널의 수 만큼 커널의 계산이 늘어날 뿐 출력 이미지 수에는 영향을 주지 않는다.

3.2 사소한 변화를 무시해주는 맥스풀링 레이어

p119. 맥스풀링 레이어는 컨볼루션 레이어의 출력 이미지에서 주요값만 뽑아 크기가 작은 출력 영상을 만든다. 이것은 지역적인 사소한 변화가 영향을 미치지 않도록 한다. 주요 인자는 다음과 같다.

  • pool_size: 수직, 수평 축소 비율을 지정한다. (2, 2)이면 출력 영상 크기가 입력 영상 크기의 절반으로 줄어든다.
3.3 영상을 일차원으로 바꿔주는 플래튼 레이어

p120. 컨볼루션 신경망 모델에서 컨볼루션 레이어나 맥스풀링 레이어를 반복적으로 거치면 주요 특징만 추출되고, 추출된 주요 특징은 전결합층에 전달되어 학습된다. 전결합층에 전달하려면 1차원 자료로 바꿔줘야 하는데 이때 사용하는 레이어가 플래튼 레이어이다.

 

5.3 데이터셋 생성하기

p127. 케라스에서는 이미지 파일을 쉽게 학습시킬 수 있도록 ImageDataGenerator 클래스를 제공한다. flow_from_directory 함수를 사용해서 특정 폴더에 이미지를 분류해 놓았을 때 이를 학습시키기 위한 데이터셋으로 만들어 주는 기능을 제공한다.

p130. 제너레이터로 생성된 배치로 학습시킬 경우 fit_generator 함수를 사용한다.

p131. 제너레이터에서 제공되는 샘플로 평가할 때는 evaluate_generator 함수를 사용하고, 예측을 위해서는 predict_generator 함수를 사용한다.

5.5 데이터 부풀리기

p139. ImageDataGenerator를 사용해서 데이터 부풀리기를 할 수 있다.

model.summary 함수를 사용하면 가중치 수를 볼 수 있습니다. p114~119에서 가중치 수를 언급하고 있는데, 이 가중치 수와 summary 함수를 통해서 나오는 가중치 수가 다릅니다. 그것은 편향을 더하지 않았기 때문입니다. 편향은 필터 하나당 하나씩 존재하기 때문에 필터 수 만큼 편향의 수가 추가되어야 합니다. 예를 들어 3채널, 2 x 2 필터 2개가 사용되었다면 가중치 수는 3 x 2 x 2 x 2 + 2이 되어 26이 됩니다.

p117 첫 번째 그림 밑에 오타가 있네요. ‘입력 이미지 사이즈가 3 x 3입니다.’

p124 소스 코드에서 %matplotlib inline 없어도 주피터 노트북에서 잘 작동합니다. 다른 소스 코드에서 이것 없이 작성한 것이 있어서 해 봤는데, 왜 그런지는 검색해 봤지만 찾을 수가 없네요.

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*