from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split
import pandas as pd
# 와인 데이터를 불러옵니다.
df = pd.read_csv('./wine_data/wine.csv', header=None)
# 와인의 속성을 X로 와인의 분류를 y로 저장
X = df.iloc[:,0:12]
y = df.iloc[:,12]
# 학습셋과 테스트셋으로 나눕니다.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True)
# 모델 구조를 설정
model = Sequential()
# 모델이 3개의 은닉층을 갖도록 구조를 설계(설정)합니다.
model.add(Dense(30, input_dim=12, activation='relu')) # 첫 번째 은닉층은 30개 노드
model.add(Dense(12, activation='relu')) # 두 번째 은닉층은 12개 노드
model.add(Dense(8, activation='relu')) # 세 번째 은닉층은 8개
model.add(Dense(1, activation='sigmoid')) # 출력층
# 모델을 컴파일
# 이진 분류를 위한 손실 함수(lost function) : binary_crossentropy, 옵티마이저 : adam
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 모델을 실행
history = model.fit(X_train, y_train, epochs=50, batch_size=500,validation_split=0.25)
#테스트 결과를 출력
score = model.evaluate(X_test, y_test)
print('Test accuracy:', score[1])
결과 저장
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.callbacks import ModelCheckpoint
from sklearn.model_selection import train_test_split
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 와인 데이터를 불러옵니다.
df = pd.read_csv('./wine_data/wine.csv', header=None)
# 와인의 속성을 X로 와인의 분류를 y로 저장
X = df.iloc[:,0:12]
y = df.iloc[:,12]
# 학습셋과 테스트셋으로 나눕니다.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True)
# 모델 구조를 설정
model = Sequential()
# 모델이 3개의 은닉층을 갖도록 구조를 설계(설정)합니다.
model.add(Dense(30, input_dim=12, activation='relu')) # 첫 번째 은닉층은 30개 노드
model.add(Dense(12, activation='relu')) # 두 번째 은닉층은 12개 노드
model.add(Dense(8, activation='relu')) # 세 번째 은닉층은 8개
model.add(Dense(1, activation='sigmoid')) # 출력층
# 모델을 컴파일
# 이진 분류를 위한 손실 함수(lost function) : binary_crossentropy, 옵티마이저 : adam
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 모델 저장의 조건 설정
modelpath="./model/all/{epoch:02d}-{val_accuracy:.4f}.keras"
checkpointer = ModelCheckpoint(filepath=modelpath, verbose=1)
# 모델을 실행
history = model.fit(X_train, y_train, epochs=50, batch_size=500,validation_split=0.25, verbose = 0, callbacks=[checkpointer])
#테스트 결과를 출력
score = model.evaluate(X_test, y_test)
print('Test accuracy:', score[1])
그래프로 과적합 확인
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.callbacks import ModelCheckpoint
from sklearn.model_selection import train_test_split
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 와인 데이터를 불러옵니다.
df = pd.read_csv('./wine_data/wine.csv', header=None)
# 와인의 속성을 X로 와인의 분류를 y로 저장
X = df.iloc[:,0:12]
y = df.iloc[:,12]
# 학습셋과 테스트셋으로 나눕니다.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True)
# 모델 구조를 설정
model = Sequential()
# 모델이 3개의 은닉층을 갖도록 구조를 설계(설정)합니다.
model.add(Dense(30, input_dim=12, activation='relu')) # 첫 번째 은닉층은 30개 노드
model.add(Dense(12, activation='relu')) # 두 번째 은닉층은 12개 노드
model.add(Dense(8, activation='relu')) # 세 번째 은닉층은 8개
model.add(Dense(1, activation='sigmoid')) # 출력층
# 모델을 컴파일
# 이진 분류를 위한 손실 함수(lost function) : binary_crossentropy, 옵티마이저 : adam
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 모델 저장의 조건 설정
modelpath="./model/all/{epoch:02d}-{val_accuracy:.4f}.keras"
checkpointer = ModelCheckpoint(filepath=modelpath, verbose=1)
# 모델을 실행
history = model.fit(X_train, y_train, epochs=2000, batch_size=500,validation_split=0.25, verbose = 0, callbacks=[checkpointer])
#테스트 결과를 출력
score = model.evaluate(X_test, y_test)
print('Test accuracy:', score[1])
# history에 저장된 학습 결과를 확인
hist_df = pd.DataFrame(history.history)
hist_df
# y_vloss에 검증(validation) 데이터셋에 대한 오차를 저장
y_vloss = hist_df['val_loss']
# y_loss에 학습(train) 데이터셋의 오차를 저장
y_loss = hist_df['loss']
epoch = np.arange(len(y_loss))
plt.plot(epoch, y_vloss, "o", c="red", markersize=2, label='Validation loss')
plt.plot(epoch, y_loss, "o", c="blue", markersize=2, label='Trains loss')
plt.legend(loc='upper right')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
학습 자동 조기 종료
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
import os
import pandas as pd
df = pd.read_csv('./wine_data/wine.csv', header=None)
# 와인의 속성을 X로 와인의 분류를 y로 저장
X = df.iloc[:,0:12]
y = df.iloc[:,12]
# 학습셋과 테스트셋으로 나눔
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True)
# 모델 구조를 설정
model = Sequential()
model.add(Dense(30, input_dim=12, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 모델을 컴파일
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 학습이 언제 자동 중단될지를 설정
early_stopping_callback = EarlyStopping(monitor='val_loss', patience=20)
# 최적화 모델이 저장될 폴더와 모델의 이름을 지정
modelpath="./model/Ch14-4-bestmodel.keras"
# 최적화 모델을 업데이트하고 저장
checkpointer = ModelCheckpoint(filepath=modelpath, monitor='val_loss', verbose=0, save_best_only=True)
# 모델을 실행
history=model.fit(X_train, y_train, epochs=2000, batch_size=500,
validation_split=0.25, verbose=1,
callbacks=[early_stopping_callback,checkpointer])
# 테스트 셋에 대한 결과를 출력
score=model.evaluate(X_test, y_test)
print('Test accuracy:', score[1])
'빅데이터 분석가 양성과정 > Python - 딥러닝' 카테고리의 다른 글
이미지 인식 - CNN (0) | 2024.07.17 |
---|---|
실습 (0) | 2024.07.17 |
모델 성능 검증 (0) | 2024.07.17 |
다중 분류 - iris 데이터 (0) | 2024.07.17 |
딥러닝 (1) | 2024.07.17 |