📝지난 수업을 정리해 봅시다~
더보기
model.fit(x_train, y_train) 을 하는 순간
가중치에 (초기)값을 할당한다. [초기값은 랜덤으로 지정]
(예측) 결과를 뽑는다.
오차를 계산한다.
오차를 줄이는 방향으로 가중치를 조정한다.(Optimizer)
단계1로 올라가 반복한다.
=> 딥러닝의 학습 과정 : ⭐파라미터 or 가중치를 업데이트
바람직한 곡선의 모습
초기에 급격히 줄어드는가?
어느 구간부터는 수평선인가?
가중치를 잘 줬군~~
첫 번째 레이어에는 input_shape(피처의 분석단위)를 지정해줘야한다.
epos = n
전체 데이터를 n번 반복해서 실행해줘
1️⃣Hidden Layer
• input layer와 Output layer 사이에 추가한 부분을 Hidden Layer라 한다.• input_shape 는 첫번째 layer만 필요 ▪ activation - 히든 레이어는 활성함수를 필요로 합니다. - 활성함수는 보통 ‘relu’를 사용
출처 : 너굴님
마지막 레이어는 무조건 output(node 수)가 1개여야 함.
sequential: 모델 타입
Dense: 레이어 타입(안에 옵션)
Dense는 '모으는' 레이어
Dense 레이어는 앞의 레이어의 모든 노드들과 연결
⭐layer 여러 개 : 리스트[ ] 로 입력
⭐활성화 함수(Activation Function)
현재 레이어(각 노드)의 결과값을 다음 레이어(연결된 각 노드)로 어떻게 전달할지 결정/변환해주는 함수
Hidden Layer에서는 이런 선형함수를 비선형 함수로 변환해 주는 역할
Output Layer에서는 결과 값을 다른 값으로 변환해 주는 역할(분류에서 필요)
✅relu(정류함수)
선형함수를 비선형으로 바꿔줌
0이하에서는 0을 0 이상으로는 그대로 출력해주는 함수
model1 = Sequential([Dense(8, input_shape = (nfeatures,), activation = 'relu'),
Dense(1)])
# Sequntial[dense(h1노드수, 인풋레이어,엑티베이션),dense(h2노드수,h1노드수,엑티베이션),dense(아웃레이어)]
💙요약
딥러닝 전처리
Layer
첫 번째 Layer에는 input_shape를 받는다. (분석단위의 shape)
2차원 데이터셋의 분석단위 1차원 → shape는 (feature 수, )
Output layer의 node 수 : 1
Activaion Function
hidden layer에 필요 (비선형 모델로 만드려고 → hidden layer를 여럿 쌓아서 성능을 높이려고)
분류 모델에서는 Out Layer에 활성화 함수 필요(회귀 모델에서는 불필요)
2️⃣Feature Respresentaion
모델 정확도를 높이기 위해서 주어진 데이터를 예측 모델의 문제를 잘 표현할 수 있는 features로 변형시키는 과정이다.
👀Hidden Layer에서 벌어지는 일
Hidden Layer는 블랙박스 모델의 일종이다.
출처 : https://journals.plos.org/plosone/article/figures?id=10.1371/journal.pone.0182580
중간에 노드가 적은 레이어 하나를 넣어서 변수가 무작정 많아지고, 모델이 복잡해지는걸 줄인다.
0보다 작으면 0을 전달하고, 0보다 크면 그 값을 그대로 전달한다.
3️⃣이진분류
함수
입력 값(input) 을 넣으면, 출력 값(Output) 을 줍니다.
입력 값을 𝒙 , 출력 값을 𝒚 로 표현합니다.
그러므로, 𝑥 를 𝑦 로 변환transformation 시켜준다고 할 수 있습니다.
회귀(Regression)
activation = 'sigmoid'
loss= 'binary_crossentropy'
이진분류
⭐활성 함수Activation Function
elbow curve
휴리스틱 방법 중 하나 가성비가 떨어지는 구간
출처 : https://en.wikipedia.org/wiki/Elbow_method_(clustering)
pred = model.predict(x_val)
# activation이 sigmoid --> 0 ~ 1 사이의 확률값.
# 그러므로 cut-off value(보통 0.5)를 기준으로 잘라서 0과 1로 만들어 준다.
pred = np.where(pred >= .5, 1, 0)
💙요약
구분
Hidden Layer
Output Layer
Compile
Activation
Activation
Node 수
optimizer
loss
Regression
relu
X
1
adam
mse
2-Class
relu
sigmoid
1
adam
binary_crossentropy