반응형
38. 인공신경망 실습(keras)
38.1 실습예제1(기초적인 인공신경망)
# 케라스 패키지 임포트
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
# 입출력 데이터
# 딥러닝 모델에 입력할 값
x = np.array([0, 1, 2, 3, 4])
# 출력값: x * 가중치 + 편향
y = x * 2 + 1
print("x: ", x)
print("y: ", y)
# 인공신경망 모델링
# 케라스 인공신경망 생성
model = Sequential()
# 입력노드 1개를 가지는 선형처리계층 추가
model.add(Dense(1, input_shape = (1,)))
# 모델 컴파일, 확률적 경사 하강법(Stochastic Gradient Descent, SGD)
# 손실함수: 평균제곱오차(Mean Square Error, MSE)
model.compile('SGD', 'mse')
# 모델 학습
# x[:2] 0, 1번 2개의 데이터
# model.fit(입력데이터, 출력데이터)
model.fit(x[:2], y[:2], epochs = 500, verbose = 1)
38.2 실습예제2 - 인공신경망(mnist)
38.3 실습예제3 - 당뇨병 데이터셋
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
# 랜덤시드 고정
np.random.seed(5)
# 피마족 인디언 당뇨병 발병 데이터셋
# 인스턴스 수: 768개
# 속성 수: 8가지
# 클래스 수: 2가지
# 1. 임신 횟수
# 2. 경구 포도당 내성 검사에서 2시간 동안의 혈장 포도당 농도
# 3. 이완기 혈압 (mm Hg)
# 4. 삼두근 피부 두겹 두께 (mm)
# 5. 2시간 혈청 인슐린 (mu U/ml)
# 6. 체질량 지수
# 7. 당뇨 직계 가족력
# 8. 나이 (세)
# 9. 5년 이내 당뇨병 발병 여부
# 양성 268개(34.9%), 음성 500개(65.1%)
data = np.loadtxt("d:/data/pima-indians-diabetes.csv", delimiter = ",")
# 2. 데이터셋 생성(학습용 : 검증용 = 75 : 25)
x_train = data[:576,0:8]
y_train = data[:576,8]
x_test = data[576:,0:8]
y_test = data[576:,8]
# 3. 모델 구성
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. 모델 학습
hist = model.fit(x_train, y_train, epochs = 1500, batch_size = 64)
38.4 실습예제4 - 붓꽃데이터
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as np
import os
import seaborn as sns
from sktlearn.preprocessing import LabelEncoder
from sktlearn.metrics import classification_report, confusion_matrix
from sktlearn.model_selection import train_test_split
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers improt Adam
# 붓꽃 데이터셋 로딩
iris = sns.load_dataset("iris")
print(iris.head())
print(iris.tail())
# 원 핫 인코딩
X = iris.iloc[:,0:4].values
y = iris.iloc[:,4].values
encoder = LabelEncoder()
y1 = encoder.fit_transform(y)
Y = pd.get_dummies(y1).values
Y[:10]
# 학습용, 검증용 데이터셋 구분
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state = 1)
X_train.shape, X_test.shape, y_train.shape, y_test.shape
# 모델 생성
model = Sequential()
mdoel.add(Dense(64, input_shape=(4,), activation = 'relu'))
model.add(Dense(64, activation = 'relu'))
model.add(Dense(3, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer = 'Adam', metrics = ['accuracy'])
model.summary()
# 그래프 출력
plt.figure(figsize = (12, 8))
plt.plot(hist.history['loss'])
plt.plot(hist.history['val_loss'])
plt.plot(hist.history['acc'])
plt.plot(hist.history['val_acc'])
plt.legend(['loss', 'val_loss', 'acc', 'val_acc'])
plt.grid()
plt.show()
38.5 실습예제5 - 타이타닉 데이터셋
%matplotlib inline
# import mglearn
from matplotlib import font_manager, rc
import matplotlib.pyplot as plt
from IPython.display import SVG
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
# 한글 처리를 위해 폰트 설정
font_name = font_manager.FontProperties(\
fname = "c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family = font_name)
import pandas as pd
import numpy as np
import seaborn as sns
import tensorflow as tf
import keras
from keras.models import Sequential
from keras.layers.core import Dense
from keras.utils.vis utils import model_to_dot
np.random.seed(7)
반응형