Tensorflow·keras에서 CNN을 구축하여 이미지 분류해 보기(개요편)

아래의 기사에서는, 순전파형 신경망에 의한 필기 화상을 취급해 예측을 실시했습니다.

Tensorfrow로 화상 분류 등 학습해 본다(필기 문자 인식편 1)
Tensorfrow에서 화상 분류 등 학습해 본다(필기 문자 인식편 2)
Tensorfrow로 화상 분류 등 학습해 본다(필기 문자 인식편 3)

이 기사에서는 컨벌루션 신경망 CNN(Convolutional Neural Network)을 사용하여 이미지를 분류해 보겠습니다. CNN은 1980년대에 사고방식이 있었고, 1990년대에 LeNet이라는 모델이 생각되었다.

CNN 모델 배경



순전파형 신경망에서도 화상을 취급할 수는 있었지만, 처리 중에서 2차원의 행렬 데이터를 1차원의 데이터로 변환하여 취급하고 있었습니다만 이 중에서 화상이 가지는 정보가 손상된다고 한다 일이 있고 생각된 것이 CNN입니다.

순전파형 신경망 기사에서는 MNIST의 필기 문자 세트를 다루었지만 28x28의 흑백 이미지였습니다. 이 이미지를 784의 1차원 행렬로 변환하여 처리했습니다. 구체적으로

code
x_train = x_train.reshape(60000, 784) 
x_test = x_test.reshape(10000, 784) 

#変換後の構造を確認する。
print('x_train.shape:', x_train.shape)
print('x_test.shape:', x_test.shape)

라는 코드를 써서 변환하고 있었습니다.

이미지 자체는 2차원으로 표현된 경우, 피사체의 세로·가로 등 위치 정보도 가지고 있을 것입니다만, 1차원으로 하면 그것이 손실된다고 하는 것으로, 2차원으로 취급할 수 있으면 그 정보도 유지할 수 있습니다 (더 말하면 컬러 이미지라면 색 정보도 있으므로 3 차원도됩니다)

CNN 구성(개요)



CNN에 대한 개요를 제공합니다. C 여러가지 도중에 활성화 함수, 최적화 수법을 조합하는 등 진화하고 있습니다만, 여기에서는 대략적인 개요를 우선은 잡고 싶습니다. CNN은 컨벌루션층과 풀링층을 겹쳐 결국 전체 결합층과 출력층을 겹쳐 가는 방법입니다.



컨벌루션 레이어



컨벌루션 레이어는 이미지에 커널(필터)을 겹쳐 계산하여 이미지의 특징량을 얻기 위한 것입니다. 이 필터를 사용하여 실제 이미지에서 특징 맵을 만듭니다.



CNN에서는 필터의 값에 따라 특징 맵으로서 얻을 수 있는 값이 다르기 때문에, 필터의 값이 가중치가 되어 최적화하는 파라미터도 됩니다.

풀링 층



특징 맵에 대해 정해진 계산을 실시해 작게 하는 처리입니다. 이 처리를 다운 샘플링 또는 단순히 샘플링이라고합니다. 풀링 레이어의 계산에는 두 가지 주요 유형이 있으며 최대 MAX 풀링과 평균값을 갖는 Avg 풀링이 있습니다. 풀링 레이어에서는 계산만을 수행하고 학습해야 할 파라미터가 없습니다.


전체 결합층·출력층



전체 결합층에서는 컨벌루션층과 풀링층에서 얻어진 결과의 다차원 배열을 1차원 상태로 되돌려 최종적으로 분류가 가능한 형태로 합니다. 이 처리는 순전파형 신경망에서도 최종적으로 1차원으로 하고 softmax 함수로 다클래스로 분류한 처리와 동의의 것입니다.

요약



개요를 잡고 어떤 층이 필요한지 보았습니다. 다음 번 이후에는 각각의 층을 TensorFlow와 keras를 사용해 구현해 가고 싶습니다.

좋은 웹페이지 즐겨찾기