본문 바로가기

ABC 부트캠프

ABC 부트캠프 day4 : 딥러닝 활용

...숫자인식을 할때 랜덤한 결과값보다 연속적인 결과값으로 학습시켰을때 더 학습이 잘될까? 더 잘안될까?

 

중간층을 내맘대로 늘려도 괜찮다. 시간이 오래걸린다. 학습이 더 잘될수도 있다. 이때 유닛수를 적절하게 선택하는것이 데이터과학자의 역량이다.

어제보다 학습이 확실히 잘됐다.

결과를 보고  epoch와 dense층의 갯수 각각의 노드수를 여러가지로 실행해보자 감을 잡아보자.

 

많은 dense층의 부작용 질문

이미 마지막 층이 학습을 다 완료해버리니까 앞에 사람들은 학습을 못해서 딥러닝으로 학습하지 못하게 했지만 relu 함수의 발견으로 시그모이드보다 온오프 해주기 때문에 또한 골고루 학습하고 싶어서 drop out을 통해 랜덤으로 학습시키면서 딥러닝이 지금은 많이 학습해도 괜찮다.

 

epoch를 높은 값으로 설정했을때 이미 accuracy가 목표치에 도달하고 점점 하강하고 있다면 얼리스탑하는 코드도 존재한다. (over fiting 방지)

 

손실곡선은 공굴리는것과 비슷하다.

 

경사하강법을 말하시는것 같다.

 

컨벌루션은 사진에서 노이즈 부분은 지우고 중요한 부분만 순차적으로 남기는 과정

 

많은 층을 주었을때 검증 정확도가 크게 향상되진 않았다. 레이어를 늘린다 해도 참여하지 않는 노드를은 계속 참여하지 않기 때문에 ->  drop out으로 해결할 수 있다.

 

 

slide3

이미지를 인식할때 고려했던 사항들을 기술로 만드는것 

포토샵으로 흐리게하고 선명하게하고 어둡게하고 밝게하고

 

이미지가 있을때 3x3 영역에서 곱을 한다면 대각선이나 모서리에 있는 픽셀은 균등하게 돌아가지 않기 때문에 패딩을 통해 가상의 영역을 확장시켜서 계산을 진행한다.

 

뉴런에서도 합성곱을 할때 좀더 정답에 맞는것을 할때 가중치를 좀더 부여한다.

 

max pooling이란 

핵심되는 feature를 좀더 부각시키는것 가장 높은 값만 남겨두는것

 

훈련을 하다보니 참여하는 노드만 참여하고 노는 노드는 계속 놀게된다. 모든 노드가 참여하는 것이 아니라 드롭아웃기법을 통해 강제적으로 특정한 비율의 노드를 꺼주는것 

 

 

 

 

사진의 불필요한 부분이 많을때 합성곱을 깊게 실행하는것도 방법이다.

 

밀집 -> 밀집 -> Dense 

 

전체그림에서 윤곽과 특징을 뽑아가는 과정 정답과 연관성이 높은 것만 살려가는 과정

 

model.add(Conv2D(75, (3, 3), strides=1, padding="same", activation="relu", 
                 input_shape=(28, 28, 1)))

 

3x3 커널 한칸씩 옮겨가며 실행 같은 모양으로 패딩 활성함수 relu 인풋 데이터 형태

 

model.add(Conv2D(75, (3, 3), strides=1, padding="same", activation="relu", 
                 input_shape=(28, 28, 1)))
model.add(BatchNormalization())
model.add(MaxPool2D((2, 2), strides=2, padding="same"))

 

이거 세개는 같이 묶어서 층을 만들어야한다.

 

이미지를 줄였다 늘렸다 하기때문에 하나만 한다면 사이즈가 안맞을 수도 있고 의미가 없어질수도 있다.

 

model.add(Flatten()) 1차원으로 변경

 

 

1차원배열을 2차원으로 바꾸는 작업을 해줘야함

 

val_loss가 들쑥날쑥하는 이유는 val 데이터는 훈련과정에 간섭하지는 못함, 

 

데이터 증강

컴퓨터는 색만 바뀌어도 다른 사진이라고 인식하기 때문에 사진을 돌리고 반전시키고 뒤집게 시켜 여러 데이터셋을 증가시키는것을 말한다.

 

무조건 뒤집는것은 좋지 않다. 2를 반전시키면 5지만 그걸 2로 학습시켜버리면 오류가 생기기 때문에 적절하게 바꿔준다. 

 

 

flow라는 개념은 데이터를 모두 다 만들어 놓는게 아니라 데이터가 사용될때 그때 그때 만들어서 사용하는 것 그래서 코드가 약간 다르다. 

 

 

 

다음학습을 할땐 실행되고 있는 커널을 종료해준뒤 실행해 준다.

 

색이 있는 컬러 사진을 학습 시킬때는 r,g,b 값의 세체널로 나줘서 학습을 진행해준다.

 

include_top=False 전이학습 시킬때  기존모델에서 끊어주는 역할