Polynomial
단층(dense=1)인데도 경계면이 비선형.
직선을 이용한 이항 분포 모델링
binary 문제는 확률로 접근해야하니 0~1로 출력 값 제한
differentiable and continuous function 으로 변환
신경망에서는 비선형 활성화 함수가 필수적.
선형함수가 모양이 nice but 선형함수를 다층구조로 해도 단층 구조와 똑같 (:선형 함수 조합의 한계)
-> 따라서 비선형 함수를 사용해야 함 (다층 네트워크 구조로 사용하려면)
실습
시작값이 gray, rgb는 큰 문제가 아냐.
2차원 영상을 준다하더라도 필터링 많이 해, 필터 수만큼 layer가 쌓이는 것임
마지막 채널 의미가 input층에 대해 왜 4차원으로 만드냐면
첫번째 convolution layer를 10번 쓰면, 6000개짜리가 8x8짜리가 64개(feature수만큼) 만들어져
샘플수, 영상 크기 2개, 채널+필터수 -> 모든 input을 4차원으로 맞춰. 4차원이 필요함
CNN 거치면서 채널 수 증가
컨볼루션 신경망에서의 필터 학습
Low-level filter : 보통 edge 추출. 얼굴의 밝기
특징이 크게 상관 없는 feature.
mid-level filter : 눈,코,입
high-level filter : 얼굴
컨볼루션 신경망 정리
: 특징을 추출하는 layer... class 개념이 없어.
input: 샘플수 4개 * 이미지 사이즈 28 * 28 * 흑백영상 1
convolution: 4 * 28 * 28 * 필터 갯수25
max pooling: 4 * 영상 사이즈 반으로 줆 14 * 14 * 25
convolution: 4 * 14 * 14 * 두번째 필터 갯수 50
max pooling: 4 * 7 * 7 * 50
: 특징을 분류하는 layer...
이게 flatten 거쳐서.. (1차원 특징) MLP로 넘어올 때는 4 * 2450 (2차원)
샘플 하나가 2450개 (=7 * 7 * 50). 2450차원으로 확장됨.
깊이는 최대 2450의 1.5배정도
에서는
학습해야 할 parameter 수 = filter 개념.
영상의 크기에 의존하지 않아.
몇 개의 필터를 어떤 크기로(3x3, 5x5) 쓸 것인가에 따라 weight 달라짐
필터수*필터크기만큼 가중치
stride
는 (1,1) 많이 쓰는데
(1,1) 아니면 출력 결과물이 크게 달라진다.
커널 씌우고 stride란 몇 칸 이동할 것인가.
만약 stride가 (2,2)면 반으로 줄어드는 것.
sampling과 가깝다
사실 stride도 4차원임. 맨 앞은 샘플 건너뛸 갯수, x축으로 건너뛸 sampling 할 갯수, y축으로 건너뛸 sampling 할 갯수, 채널을 건너뛸 갯수
1,1이 아닌 경우가 거의 없다.
model.add(Conv2D(filters = 50, kernel_size = (3,3), strides = (1,1), padding = 'same'))
convolution filter 씌워도 padding='same'
이므로 영상 크기 보존
보통 CNN 쪽에서는 dropout 안 쓰고
앙상블 효과를 나타내기 위해 MLP에서 사용.
training parameter 계산
컨볼루션 레이어의 학습 파라미터 수는 "입력채널 x 필터폭 x 필터 높이 x 출력 채널수"로 계산.
필터수*커널사이즈+필터수(각 필터마다 bias) = (커널크기3 * 3 + 바이어스1) * 필터수10
전이학습
모델링 뒤로 갈 수록 영상을 줄이는 과정에서 영상이 rough해진다. 즉, 영상 정보가 없어진다.
모델링 맨 밑에 있는 애들은 전체적인 특성만 보인다.
보통 위에 있는 것들은 학습 안 시킨다 (trainable=false)
아래에 있는 걸 true로 만들어 밑에 있는 애들만 학습시킨다.
-> trainable로 온오프 가능
trainable=false : weight 그대로.
정리 -CNN
Convolution 과정은 이미지에서 어떤 특징이 얼마나 있는지를 구하는 과정이라고 할 수 있고 Pooling 과정은 이미지의 뒤틀림이나 크기변화에 따른 왜곡의 영향을 축소하는 과정이라고 할 수 있습니다.
세로 필터를 거치고 나면 이미지에서 세로선인 부분이 부각되는 것을 알 수 있습니다. 부각된 뒤에 Pooling 과정을 거치고 나면 이미지에서 해당필터부분이 어디에 있는지 보다 확실하게 보여주고 이미지의 왜곡에 의한 영향을 줄여주는 역할을 해줍니다.
아래쪽의 1은 위쪽의 1에서 좌측으로 한 칸씩 옮긴 결과물 입니다. MLP 에서 이 두 이미지를 사용한다면 38 pixel 에서 값의 변화가 있습니다. 하지만 세로 필터를 거친 뒤 Pooling 과정을 거치고 난 뒤에는 총 12 pixel 에서만 값의 변화가 있습니다. 한 번의 Pooling 과정을 통해 변화 pixel 의 수가 약 70% 나 감소합니다.
또한 CNN 의 대단한 점은 Convolution 에 사용하는 Filter 또한 스스로 역전파 알고리즘을 통해 학습한다는 부분입니다.
중간 output 구하기
중간의 output은 중간값이라서 몰라 = 추후 전이학습에서도 문제가 될텐데
어떻게 가져오나?
prediction: forward network: keras, tensorflow에서의 predict. 최종 output을 내달라.
중간 output 산출하는 것도 prediction이라고 함.
'Python > Deep learning' 카테고리의 다른 글
다층 퍼셉트론을 향상시키는 방법 - 2 (0) | 2020.01.21 |
---|---|
다층 퍼셉트론을 향상시키는 방법 - 1 (0) | 2020.01.21 |
케라스 회귀 (0) | 2020.01.20 |
DNN (Deep Neural Network) (0) | 2020.01.20 |
경사하강법(SGD) (0) | 2020.01.20 |