일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 차원축소
- 은준아 화이팅
- 자연어 처리
- word2vec
- 기초통계
- 기술통계학
- Django
- 가설검정
- 머신러닝
- 텐서플로2와 머신러닝으로 시작하는 자연어처리
- 텍스트 분류
- Pandas
- 모두의 딥러닝
- 밑바닥부터 시작하는 딥러닝2
- 다층 퍼셉트론
- student t분포
- 감성분석
- 회귀분석
- 최소자승법
- 구글 BERT의 정석
- 결정계수
- 오래간만에 글쓰네
- numpy
- 군집화
- 파이썬 pandas
- 밑바닥부터 시작하는 딥러닝
- 코사인 유사도
- rnn
- 히스토그램
- F분포
- Today
- Total
데이터 한 그릇
딥러닝 모델 설계하기 본문
Tensorflow 와 keras 를 이용
모델 설계는 크게 세 개로 구분
`model = Sequential()`
`model.compile()`
`model.fit()`
입력층, 은닉층, 출력층
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
model.add(Dense(30, input_dim = 17, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))
`Sequential()` 함수를 통해서 퍼셉트론의 층을 쌓을 수 있다.
시퀀셜 함수를 시행하고 `.add()` 를 이용해서 층을 쌓아 올릴 수 있다.
위의 코드에서 add 를 두 번 사용했으니, 층이 두 개를 만든 것.
맨 마지막 층은 결과를 출력하는 출력층.
나머지는 모두 은닉층.
(우리는 xor 문제 해결을 위해서 단일 퍼셉트론이 아니라 다층 퍼셉트론을 만들어야 함을 살펴봤다.)
`model.add(Dense(30, input_dim = 17, activation = 'relu'))`
`add()` 함수를 통해 층을 만들었다면, `Dense()`를 통해서 그 층의 노드의 개수 설정 가능.
위의 코드는 30을 값으로 줬으니 노드 30개를 생성함을 의미한다.
우리가 앞서 살펴봤던 퍼셉트론의 구조는 입력층 -> 은닉층 -> 출력층 으로 이루어져 있었다.
근데 코드를 보면 은닉층 -> 출력층으로 이루어진 걸 볼 수 있다.
keras 에서는 입력층을 따로 만들지 않고 은닉층이 입력층의 역할을 겸임한다.
겸임하는 방법은 `input_dim` 변수를 사용하는 것. input_dim 은 입력 데이터에서 몇 개의 데이터를 가져올지 정하는 것. 위의 코드에서는 input_dim 값이 17로 되어있다. 이는 입력데이터 17개를 은닉층의 30개의 노드로 보내라는 의미.
이제 입력층의 17개 각각의 데이터는 각각의 노드에 임의의 가중치가 부여되어 전달된다. 그리고 은닉층에서 활성화 함수를 만난다. 데이터들이 활성화 함수에서 가공되어서 결과값이 출력층으로 전달된다.
기울기 소실 문제를 해결하기 위해서 relu 함수를 사용.
model.add(Dense(1, activation = 'sigmoid'))
마지막 층이므로 출력층이 된다.
출력값을 하나로 정해서 보내야 하므로 노드 수는 1개.
활성화 함수를 거쳐 최종 출력 값으로 나와야 한다.
이 활성화 함수를 simoid 로 지정한 것.
모델 컴파일
model.compile(loss = 'mean_squared_error', optimizer = 'adam', metrics = ['accuracy'])
`.compile()` 함수는 앞서 지정한 모델이 효과적으로 구현될 수 있게 환경을 설정해 주면서 컴파일 해주는 것.
앞서 선형 회귀에서 임의의 예측선이 실제 데이터와 오차가 어느 정도 되는지 구했었다. 이때 사용된 식이 오차제곱합(mean_squared_error) 이였다. 이 식을 이용해서 예측선의 오차 정도를 구하고 이를 기울기에 대해서 편미분하여 미분값이 0에 가깝게 수정하여 오차를 줄여나갔다. (즉, 경사하강법에서 오차를 사용, 딥러닝에서는 오차 역전파 과정에서 사용)
위의 `loss` 파라미터는 위의 과정에서 어떤 오차공식을 사용할지 적어주는 파라미터다.
`mean_squared_error` 제외하고도 유의미한 공식도 존재한다. 바로 `교차 엔트로피`다.
오차제곱합의 경우에는 수행 시간이 길다는 단점이 있다.
교차 엔트로피 같은 경우, 오차가 커질수록 수렴 속도가 빨라지고 오차가 작아질수록 수렴 속도가 느려지게 만든다.
`optimizer` 파라미터는 앞서 배웠던 최적화 방식을 의미한다. 예를 들어서 Adam 과 같은 것들이 있다.
각각의 최적화 방식에 따라 확률적 경사 하강법을 사용하는지, 모멘텀 방식을 사용하는지가 달라진다.
`metrics` 파라미터는 모델 수행 결과를 나타내게끔 하는 파라미터.
교차 엔트로피
교차 엔트로피는 주로 분류 문제에서 등장한다.
특별히 예측값이 true or false 일 경우에 사용한다.
`binary_crossentropy` (이항 교차 엔트로피)
모델 실행하기
model.fit(X, Y, epochs = 100, batch_size = 10)
모든 샘플(인스턴스) 에 대해서 학습 프로세스가 1번 진행되는 것 => 1 epoch
위의 `epochs`인자를 100으로 설정한건 , 모든 샘플을 학습하는 것을 100번 반복하라는 의미다.
`batch_size = 10` 은 전체 샘플 470개를 10개씩 끊어서 학습에 집어넣으라는 의미.
너무 사이즈가 커지면 속도가 느려지고 사이즈가 작아지면 실행 값의 편차가 생겨서 전체 결괏값이 불안정해질 수 있다.
'딥러닝 > 모두의 딥러닝' 카테고리의 다른 글
딥러닝 과적합 피하기 (0) | 2022.01.05 |
---|---|
딥러닝 실습 (0) | 2022.01.05 |
신경망에서 딥러닝으로 (0) | 2022.01.04 |
딥러닝의 동작 원리(1) - 선형 회귀 (0) | 2022.01.04 |
딥러닝 시작 위한 기초 수학 (0) | 2022.01.04 |