728x90
반응형

합성곱 층

  • 합성곱은 필터를 이미지의 일부분과 픽셀끼리 곱한 후 결과를 더하는 것이다.
  • 이미지 영역이 필터와 비슷할수록 큰 양수가 출력되고 필터와 반대일수록 큰 음수가 출력된다.

 

예시 이미지

im = rgb2gray(data.coffee())
im = resize(im, (64,64))
print(im.shape)

plt.axis('off')
plt.imshow(im, cmap = 'gray');

[그림1] 예시 이미지

 

합성곱 수행 코드

from keras.layers import Input, Conv2D

input_layer = Input(shape=(64,64,1))

conv_layer_1 = Conv2D(
    filters = 2
    , kernel_size = (3,3)
    , strides = 1
    , padding = 'same'
)(input_layer)

 

 

스트라이드(Stride)

  • 필터가 한 번에 입력 위를 이동하는 크기
  • 스트라이드를 크게 하면 텐서의 크기가 줄어든다.

 

패딩(Padding)

  • padding = 'same' 매개변수는 입력 데이터를 0으로 패딩하여 strides = 1일 때 출력의 크기를 입력 크기와 동일하게 만든다.
from keras.models import Model
from keras.layers import Flatten, Dense

input_layer = Input(shape=(32,32,3))

conv_layer_1 = Conv2D(
    filters = 10
    , kernel_size = (4,4)
    , strides = 2
    , padding = 'same'
)(input_layer)

conv_layer_2 = Conv2D(
    filters = 20
    , kernel_size = (3,3)
    , strides = 2
    , padding = 'same'
)(conv_layer_1)

flatten_layer = Flatten()(conv_layer_2)

output_layer = Dense(units=10, activation='softmax')(flatten_layer)

model = Model(input_layer, output_layer)
model.summary()

[그림2] summary 메서드 출력

  • 네트워크는 텐서에 대해 대수학 계산을 수행하기 때문에 이미지를 하나씩 전달할 필요가 없다.
  • 여러 개를 묶어 배치(batch)로 전달한다.

 

 

배치 정규화 층

  • 심층 신경망을 훈련할 때 대표적으로 어려운 한 가지는 네트워크의 가중치를 일정한 범위 안에서 유지해야 한다는 것이다.
  • 값이 커지기 시작한다면 네트워크에 그레이디언트 폭주(gradient exploding) 문제가 발생했다는 신호다.
  • 배치 정규화 층은 배치에 대해 각 입력 채널별로 평균과 표준 편차를 계싼한 다음 평균을 빼고 표준 편차로 나누어 정규화한다.  
BatchNormalization(momentum = 0.9)
  • momentum 매개변수는 평균과 표준 편차의 이동 평균을 계산할 때 이전 값에 주는 가중치다.

 

 

드롭아웃 층

  • 알고리즘이 훈련 데이터셋에만 잘 동작하고 테스트 세트에서는 그렇지 않다는 것을 과대적합 문제가 있다고 말한다.
  • 이 문제에 대응하려면 규제(regularzation) 기법을 사용해 모델이 과대적합되는 것에 벌칙을 부여한다.
  • 훈련과정에서 드롭아웃 층은 이전 층의 유닛 일부를 랜덤하게 선택해 출력을 0으로 지정한다.
    • 효과적인 이유는 네트워크가 특정 유닛 하나 혹은 일부에 과도하게 의존하지 않기 때문이다.

 

합성곱, 배치 정규화, 드롭아웃 적용하기

input_layer = Input((32,32,3))
NUM_CLASSES = 10

x = Conv2D(filters = 32, kernel_size = 3, strides = 1, padding = 'same')(input_layer)
x = BatchNormalization()(x)
x = LeakyReLU()(x)


x = Conv2D(filters = 32, kernel_size = 3, strides = 2, padding = 'same')(x)
x = BatchNormalization()(x)
x = LeakyReLU()(x)


x = Conv2D(filters = 64, kernel_size = 3, strides = 1, padding = 'same')(x)
x = BatchNormalization()(x)
x = LeakyReLU()(x)


x = Conv2D(filters = 64, kernel_size = 3, strides = 2, padding = 'same')(x)
x = BatchNormalization()(x)
x = LeakyReLU()(x)


x = Flatten()(x)

x = Dense(128)(x)
x = BatchNormalization()(x)
x = LeakyReLU()(x)
x = Dropout(rate = 0.5)(x)

x = Dense(NUM_CLASSES)(x)
output_layer = Activation('softmax')(x)

model = Model(input_layer, output_layer)

 

model.summary()

[그림3] 합성곱 신경망 구조

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.yes24.com/Product/Goods/81538614?OzSrank=1

 

미술관에 GAN 딥러닝 실전 프로젝트 - YES24

창조에 다가서는 GAN의 4가지 생성 프로젝트 이 책은 케라스를 사용한 딥러닝 기초부터 AI 분야 최신 알고리즘까지 설명한다. 기계 스스로 그림을 그리고, 글을 쓰고, 음악을 작곡하고, 게임을 하

www.yes24.com

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기