728x90
반응형
합성곱 층
- 합성곱은 필터를 이미지의 일부분과 픽셀끼리 곱한 후 결과를 더하는 것이다.
- 이미지 영역이 필터와 비슷할수록 큰 양수가 출력되고 필터와 반대일수록 큰 음수가 출력된다.
예시 이미지
im = rgb2gray(data.coffee())
im = resize(im, (64,64))
print(im.shape)
plt.axis('off')
plt.imshow(im, cmap = 'gray');
합성곱 수행 코드
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()
- 네트워크는 텐서에 대해 대수학 계산을 수행하기 때문에 이미지를 하나씩 전달할 필요가 없다.
- 여러 개를 묶어 배치(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()
http://www.yes24.com/Product/Goods/81538614?OzSrank=1
728x90
반응형
최근댓글