[혼자 공부하는 머신러닝+딥러닝] chap 8.이미지를 위한 인공신경망

DoHee-Kim·2023년 7월 6일
0

혼공머신딥러닝

목록 보기
2/3

합성곱

  • 합성곱(convolution): 일부에 가중치를 곱해서 입력데이터의 유용한 특성만 드러나게 하는 것
  • filter: 뉴런 개수
  • kernel: 입력에 곱하는 가중치
  • feature map: 합성곱 계산을 통해 얻은 출력
from tensorflow import keras
keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu')
  • 필터의 개수(10), 커널 크기(3,3)는 반드시 지정해주어야함


padding & stride & pooling

  • padding: 입력 배열의 주위를 가상의 원소로 채우는 것, 0으로 채움
    • same padding: 입력과 특성맵의 크기를 동일하게 만들기 위해 입력 주위에 0으로 패딩하는 것
    • valid padding: 패딩 없이 순수한 입력 배열에서만
  • stride: 이동의 크기
  • pooling: 합성곱 층에서 만든 특성맵의 가로세로 크기를 줄이는 역할을 수행, 특성 맵의 개수를 줄이지는 않음
    • max pooling: 도장찍은 영역에서 가장 큰 값 고르기
    • average pooling: 평균값 고르기
    • 커널이 stride크기로 겹치면서 이동하는 것과 달리, pooling에서는 겹치지 않고 이동


합성곱 신경망의 전체 구조 및 만들기

합성곱 층에서 feature map을 생성->pooling에서 크기를 줄이는 구조->마지막에 dense layer인 output layer에 전달하기 위해 Flatten을 통해 1차원 배열로 펼치고 전달

model = keras.Sequential()
model.add(keras.layers.Conv2D(32, kernel_size=3, activation='relu', padding='same', input_shape=(28,28,1)))
model.add(keras.layers.MaxPooling2D(2))

model.add(keras.layers.Conv2D(64, kernel_size=3, activation='relu', padding='same'))
model.add(keras.layers.MaxPooling2D(2))

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(100, activation='relu'))  
model.add(keras.layers.Dropout(0.4))  
model.add(keras.layers.Dense(10, activation='softmax'))

모델 compile, 훈련, 성능평가는 이전까지와 동일



가중치 시각화

<training하고 나서 커널을 출력한 결과(커널이 32개일 때)>

<training하지 않았을 때의 커널을 출력한 결과>

  • 더 두루뭉실하게 출력되는 모습(특징을 잘 잡아내지 못함)


특성맵 시각화

<1번째 합성곱이 만든 32개의 특성맵>

<2번째 합성곱이 만든 64개의 특성 맵>



[출처] 혼자공부하는 머신러닝+딥러닝

0개의 댓글

관련 채용 정보