본문 바로가기
머신러닝딥러닝/딥러닝

딥러닝(Deep learning) #8 모델 설계 keras

by orangecode 2022. 4. 13.
728x90
입력층 은닉층 출력층

Sequential() 힘수

- Sequential()을 모델로 선언하고 model.add()라는 라인을 추가하면 새로운 층 형성가능.

- Sequential 모델은 각 레이어에 정확히 하나의 입력 텐서와 하나의 출력 텐서가 있는 일반 레이어 스택에 적합합니다.

 

model.add() 함수 : 새로운 층을 만드는 함수

 

Dense()함수 : model.add()로 새로운 층 생성 후, Dense()함수를 통해 몇개의 노드를 만들 건지 지정함.   

- (Dense(30, input_dim=17, activation='relu'))  

   = Dense(30개의 노드), input_dim(폐암환자 생존여부 데이터 17개를 노드로 보냄), activation = 'relu'(활성화 함수)

 

# 딥러닝 모델 설정

# 입력층 : Sequential()
model = Sequential()

# 은닉층 : 30개의 노드, 17개의 입력값(폐암환자 속성), relu 활성화함수(기울기소실 ↓ 속도↑)
model.add(Dense(30, input_dim=17, activation='relu'))

# 출력층 : 노드 1개 = 출력 값 1개, sigmoid 활성화함수
model.add(Dense(1, activation='sigmoid'))

 

모델 컴파일

model.compile()은 지정한 딥러닝모델이 효과적으로구현될 수 있는 환경설정 + 컴파일하는 과정이다.

 

model.compile(loss) : 오차함수 사용

 

model.compile(optimizer) : 최적화 방법

 

model.compile(metrics) :

모델 컴파일 될 때, 모델 수행결과를 나타내게끔 설정하는 부분. 정확도 측정 시 사용되는 test sample을 제외시켜 과적합문제를 방지하는 기능이다.

# 딥러닝 컴파일&훈련
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

오차함수 loss = 'mean_squared_error' 

MSE 평균제곱오차 함수는 수렴하기까지 시간이 오래걸리고 속도가 느리다는 단점이 있다.

교차 엔트로피로 오차함수를 바꾸면, 오차가 커질경우 수렴속도가 빨라지고 오차가 작아지면 속도가 감소하게 된다.

 

최적화함수 optimizer = 'adam'

 

교차엔트로피

교차엔트로피는 분류 문제에서 많이 사용된다.

특별히 예측값이 참/거짓 둘 중 하나인 형식일 때, binary_crossentropy(이항 교차 엔트로피) 사용한다.

 

현재 결과도출은 생존(1) / 사망(0) 이므로 binary_crossentropy(이항 교차 엔트로피)를 사용하기 알맞다.

 

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

→ model.compile(loss='binary_crossentropy', optimizer='adam', metrics = ['accuracy'])

 

- loss=mean_squared_error를 사용했을 때,

- loss=binary_crossentropy를 사용했을 때,

loss 함수 2개를 사용했을 때 정확도는 0.8511로 동일하나

loss율이 많이 차이가 나온 걸 볼 수 있다.

 

 

 

대표적 오차함수

 

평균제곱계열 mean_squared_error 평균제곱오차
- mean(squared(yt-yo))
mean_absolute_error 평균절대오차
- mean(abs(yt-yo))
mean_absolute_parsentage_error 평균 절대 백분율 오차
- mean(abs(yt-yo)/abs(yt)) (단, 분모 ≠ 0)
mean_squared_logarithmic_error 평균 제곱 로그 오차
- mean(square(log(yo) + 1) - (log(yt) + 1))
교차 엔트로피 categorical_crossentropy 범주형 교차 엔트로피(일반적 분류)
binary_crossentropy 이항 교차 엔트로피

 

모델 실행하기

model.fit() : model.compile 단계에서 정해진 환경에서 데이터로 실행시킬 때 사용되는 함수

 

# 딥러닝 실행
model.fit(x, y, epochs=30, batch_size=10)

주어진 데이터 : 470명의 폐암 수술환자의 생존 여부와 속성(17개)가 담긴 데이터

 

epoch = 100 : 각 샘플이 처음부터 끝까지 100번 재사용될 때까지 실행을 반복

 

batch_size = 샘플을 한번에 몇개씩 처리할 지 정함. batch_size = 10은 샘플을 10개씩 끊어서 넣음

batch_size가 크면 속도↓, 작으면 실행값의 편차↑ 결과값 불안정

반응형

댓글