SMALL
2019. 12. 19. 19:05에 작성했던 글입니다.
다층 퍼셉트론
다층 퍼셉트론(Multilayer Perceptron)이란 이제 인간이 생각하고 학습하는 방법을 인공지능이 흉내내기 위해 인공신경망이란 개념을 만들어냈고 이를 실현하기 위해 인간의 뉴런을 퍼셉트론으로 흉내를 내서 그 목적을 실현하려 했으나 인간이 생각하기에는 간단한 XOR문제도 해결을 못하는 난관에 봉착해서 이를 해결하기 위한 시도에서 나온 것이다.
-
단층 신경망(입력층+출력층)
-
다층 신경망(입력층+히든층+출력층)
-
심층 신경망(입력층+2개 이상의 히든층+출력층)
Dense 레이어
입출력을 모두 연결해주는 Dense 레이어
# 입력 4개, 출력 8개, 학습해야 되는 가중치는 32개
Dense(8, input_dim=4, init='uniform, activation='relu')
-
첫번째 인자 : 출력 뉴런의 수를 설정.
-
input_dim : 입력 뉴런의 수를 설정.
-
init : 가중치 초기화 방법 설정.
‘uniform’ : 균일 분포
‘normal’ : 가우시안 분포 -
activation : 활성화 함수 설정.
‘linear’ : 디폴트 값, 입력뉴런과 가중치로 계산된 결과값이 그대로 출력.
‘relu’ : rectifier 함수, 은익층에 주로 사용.
‘sigmoid’ : 시그모이드 함수, 이진 분류 문제에서 출력층에 주로 사용.
‘softmax’ : 소프트맥스 함수, 다중 클래스 분류 문제에서 출력층에 사용.
코드설명
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
'''
처음 입력은 4개, 최종 출력은 1개
은닉층이므로 relu, 이진분류이므로 sigmoid
하이퍼파라미터 튜닝(hyperparameter tuning)시 입력값과 출력값은 수정 불가 (붉은색)
'''
model.add(Dense(8, input_dim=4, init='uniform', activation='relu'))
model.add(Dense(6, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
실습
1) 문제 정의
데이터셋은 8개 변수와 당뇨병 발병 유무가 기록된 ‘피마족 인디언 당뇨병 발병 데이터셋’이 있습니다. 이 데이터셋을 이용하여 8개 변수를 독립변수로 보고 당뇨병 발병 유무를 예측하는 이진 분류 문제로 정의.
2) 데이터 준비
데이터셋
https://gist.github.com/ktisha/c21e73a1bd1700294ef790c56c8aec1f
링크 연결 안될 경우 첨부파일
-
CSV파일 이므로 엑셀 또는 노트패드에서 확인 가능
-
8가지 속성과 결과로 구성
-
인스턴수 768개 (데이터 수)
(1) 임신 횟수
(2) 경구 포도당 내성 검사에서 2시간 동안의 혈장 포도당 농도
(3) 이완기 혈압 (mm Hg)
(4) 삼두근 피부 두겹 두께 (mm)
(5) 2 시간 혈청 인슐린 (mu U/ml)
(6) 체질량 지수
(7) 당뇨 직계 가족력
(8) 나이 (세)
(9) 5년 이내 당뇨병이 발병 여부 << 결과
코랩에서 파일 업로드 하기
코랩 왼쪽에서 있는 열기 >> 파일 >> 업로드
3) 예제 코드
# 0. 사용할 패키지 불러오기
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# 랜덤시드 고정시키기
'''
매번 실행 시마다 결과가 달라지지 않도록 랜덤 시드를 명시적으로 지정
'''
np.random.seed(5)
# 1. 데이터 준비하기
dataset = np.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# 2. 데이터셋 생성하기
x_train = dataset[:600,0:8] # 훈련셋
y_train = dataset[:600,8]
x_val = dataset[600:700,0:8] # 검증셋
y_val = dataset[600:700,8]
x_test = dataset[700:,0:8] # 테스트
y_test = dataset[700:,8]
# 3. 모델 구성하기
'''
첫번째 Dense 레이어는 8개 뉴런을 입력받아 12개 뉴런을 출력합니다.
두번째 Dense 레이어는 12개 뉴런을 입력받아 8개 뉴런을 출력합니다.
이전 레이어에서 12개 출력이 발생하므로 굳이 input_dim을 넣지 않아도 된다.
마지막 Dense 레이어는 출럭 레이어로 8개 뉴런을 입력받아 1개 뉴런을 출력합니다.
'''
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 4. 모델 학습과정 설정하기
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 5. 모델 학습시키기
'''
첫번째 인자 : 입력 변수입니다. 8개의 속성 값을 담고 있는 X를 입력합니다.
두번째 인자 : 출력 변수 즉 라벨값입니다. 결과 값을 담고 았는 Y를 입력합니다.
epochs : 전체 훈련 데이터셋에 대해 학습 반복 횟수를 지정합니다. 1500번을 반복적으로 학습시켜 보겠습니다.
batch_size : 가중치를 업데이트할 배치 크기를 의미하며, 64개로 지정했습니다.
validation_data : 검증셋
'''
model.fit(x_train, y_train, epochs=1500, batch_size=64, validation_data=(x_val, y_val))
# 6. 모델 평가하기
scores = model.evaluate(x_test, y_test)
print("%s: %.2f%%" %(model.metrics_names[1], scores[1]*100))
BIG
'AI' 카테고리의 다른 글
Keras 순환 신경망 (1) | 2023.02.03 |
---|---|
Keras 컨볼루션 신경망 (0) | 2023.02.03 |
Keras 숫자 인식 샘플 (딥러닝 라이브러리 ) (0) | 2023.02.03 |
Keras 개요 및 개념 잡기 (딥러닝 라이브러리 ) (1) | 2023.02.03 |
ML.NET 1.3.1 릴리스 .NET 플랫폼 기계 학습 프레임 워크(DNN) (0) | 2023.02.03 |