CNN(합성곱 신경망)
CNN : Convolutional Neural Networks(합성곱 신경망)
1. Convolution & Pooling
- 컨볼루션은 한 함수가 다른 함수를 수정하는 방법을 보여주는 세 번째 함수를 생성하는 두 함수에 대한 연산
- 컨볼루션에는 교환 성, 연관성, 분배 성 등 다양한 수학적 속성이 있다
- 컨볼루션을 적용하면 입력의 모양(shape)이 효과적으로 변환된다
1D-convolution
2D-convolution
- Filter : 가중치 (weights parameters)의 집합으로 이루어져 가장 작은 특징을 잡아내는 창
- Stride : 필터(filter)를 얼만큼씩 움직이며 이미지를 볼 지 결정하는 수
ex) Stride가 1이면 한칸씩 이동하며 stride가 2 이면 한칸씩 건너뛰면서 Filter를 적용하게 되고 띈 만큼 다음 레이어의 데이터의 수가 줄어든다 - Padding : Zeros(또는 다른 값)을 이미지의 외각(가장자리)에 배치하여 conv를 할 때 원래 이미지와 같은 데이터의 수를 갖을 수 있도록 도와줌 (Stride = 1일 때) zero-padding은 크기조절과 데이터를 충분히 활용하기 위해 가장자리에 0을 더해준 것
- Pooling layer : 피처맵의 차원을 줄인다 이렇게 줄어든 피쳐들을 이용하여 ANN형태의 신경망에 넣어 Classification or Regression을 수행하게 된다
- 장점
local Feature : 지역적 특징을 잡아 냄
weight sharing
translation invariance : 어느정도 움직임이 있더라도 해석이 큰 무리가 없다.
2. CNN 분류기
-
CNN의 첫번째 단계 covolution
입력 이미지의 영역을 수신을 담당하는 뉴런에 매핑하는 변환 -
장점 : 이전 이미지 학습 기술에 비해 이미지 전처리(자르기, 센터링, 정규화)가 상대적으로 거의 필요하지 않다 / 이미지의 모든 종류의 일반적인 문제(이동, 조명 등)에 대해 견고하다
model = Sequential()
model.add(Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.summary()
summary 출력'''
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 30, 30, 32) 896
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 15, 15, 32) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 13, 13, 64) 18496
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 6, 6, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 4, 4, 64) 36928
_________________________________________________________________
flatten (Flatten) (None, 1024) 0
_________________________________________________________________
dense (Dense) (None, 64) 65600
_________________________________________________________________
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 122,570
Trainable params: 122,570
Non-trainable params: 0
'''
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10,
validation_data=(test_images, test_labels))
3. 전이 학습(Transfer Learning)
- 기존 데이터로 학습된 네트워크를 재사용 가능하도록 하는 라이브러리
학습되었다는 것은 가중치와 편향이 포함된 학습된 모델의 일부를 재사용하기에 transfer learning이라고 표현한다- 일부만 사용할수도 전체를 재학습할 수도 있다
- 교육 데이터를 적게 사용하고 교육 속도가 빠르며 더 잘 일반화하는 모델을 가질 수 있다
방법
- 이전에 학습한 모델에서 파라미터를 포함한 레이어를 가져온다
- 향후 교육 과정 중에 포함된 정보가 손상되지 않도록 해당 정보를 동결(freeze, 가중치를 업데이트 하지 않음)한다
- 동결된 층 위에 새로운 층 (학습 가능한 층)을 더한다
• 출력층(output)의 수를 조절하여 새로운 데이터셋에서 원하는 예측방법(분류, 회귀 등)으로 전환하는 방법을 배울 수 있게된다 - 새로운 데이터셋에서 새로 추가한 계층만을 학습한다
• 만약 기존 레이어를 동결하지 않으면, 학습된 레이어에서 가져온 weight까지 학습하게 된다
• 위 경우 학습할 것이 많아지므로 시간이 오래걸린다
Author And Source
이 문제에 관하여(CNN(합성곱 신경망)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ssulee0206/CNN합성곱-신경망저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)