컬러이미지든 그레이스케일이미지든 전부 처리 가능한 인공지능 개발을 위해
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 는 다음 영역을 지정할때 얼마나 건너 뛰겠냐는 의미
= 영역 크기랑 같이 해야 겹치지 않는다
'Python > DeepLearning' 카테고리의 다른 글
Transfer Learning - 전이학습 (학습된 모델 가져와 응용하기) (0) | 2024.04.19 |
---|---|
딥러닝 - ImageDataGenerator (0) | 2024.04.18 |
딥러닝 - 모델 Save, Load (0) | 2024.04.18 |
딥러닝 - 이미지분류 3) Confusion Matrix, Acrruracy (0) | 2024.04.18 |
딥러닝 - 이미지 분류 2) 모델 생성 및 확인 (0) | 2024.04.18 |