Python/DeepLearning

딥러닝 - Convolutions, MaxPooling

하니__ 2024. 4. 18. 15:23
컬러이미지든 그레이스케일이미지든 전부 처리 가능한 인공지능 개발을 위해
4차원으로 reshape 한다
X_train = X_train.reshape( 60000, 28, 28, 1)
X_test = X_test.reshape(10000, 28, 28, 1)

 

 

 

 

모델링

 

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D,MaxPooling2D, Flatten, Dense

 

Conv2D 는 컨볼루션(합성곱) 연산을 수행하는 레이어

작은 필터를 이동하면서 합성곱을 수행

이를 새로운 이미지로 변환한다

필터의 수, 크기, 스트라이드등을 설정 가능하다

 

 

MaxPooling2D 데이터의 크기를 줄이고 특징을 간소화하는 역할

입력 이미지에서 정해진 크기의 영역(예: 2x2)을 이동하면서, 해당 영역에서 가장 큰 값을 선택

이 과정을 통해 입력 데이터의 크기가 줄어들고 중요한 특징만 유지가 가능

영역의 크기, 스트라이드 등을 설정 가능

 

from typing import Sequence
def build_model():
  model = Sequential()
  model.add( Conv2D( filters = 64, kernel_size=(3,3), activation = 'relu', input_shape = (28, 28, 1) ) )
  model.add( MaxPooling2D( pool_size = (2, 2), strides = 2 ) )
  model.add( Conv2D( filters = 64, kernel_size=(3,3), activation = 'relu' ) )
  model.add( MaxPooling2D( pool_size = (2, 2), strides = 2 ) )
  model.add( Flatten() )
  model.add( Dense(128, 'relu' ) )
  model.add( Dense(10, 'softmax' ) )
  model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
  return model

 

 

Conv2D( )에서의

필터 부분은 더 많은 숫자 일수록 더 많은 특징을 추출이 가능

(3, 3)은 컨볼루션 필터의 크기

input_shape=(150, 150, 3) 은 위에서 말했다싶이 RGB 이미지값을 표현하기 위해

150x150크기의 3채널(RGB)을 입력 받겠다는 의미

 

컨볼루션 필터는 이 박스를 의미하며 이렇게 한칸 한칸 이동하면서 이미지를 변환시켜 재확인한다

 

이렇게해서 얻은 결과물은  아래 그림과 같이 비슷한 이미지의 각기 다른 결과물들로 추가적인 데이터 확보가 가능하다

 

 

 

 

MaxPooling2D(  )에서의

pool_size는 아래 그림과 같이 풀링영역의 크기

strides 는 다음 영역을 지정할때 얼마나 건너 뛰겠냐는 의미

= 영역 크기랑 같이 해야 겹치지 않는다