필요한 라이브러리 import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
구글 드라이브 마운트
from google.colab import drive
drive.mount('/content/drive')
csv파일 읽기
import os
# Working Direcctory Setting 워킹 디렉토리 세팅
os.chdir('/content/drive/csv파일 있는 위치')
df = pd.read_csv('auto-mpg.csv')
df
1. 빈데이터 확인
df.isna().sum()
2. 빈데이터 삭제
df=df.dropna()
3. X, y 설정
X=df.iloc[:,1:]
y=df['MPG']
4. 카테고리컬 데이터처리
Origin 컬럼은 다음과 같습니다. (1. American, 2. European,3. Japanese)
X=pd.get_dummies(X,columns=['Origin'])
더미삭제
X=X.drop('Origin_1',axis=1)
5. X 만 피처 스케일링 합니다. (차트 확인을 위해 y는 하지 않습니다.)
from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
scaler_X.fit_transform(X)
X = scaler_X.fit_transform(X)
6. Train / Test로 분리
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=7)
X_train
7. 딥러닝 모델링(모델링 해주는 함수만들고 모델링)
필요한 라이브러리
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
모델링 함수
def build_model():
model = Sequential()
model.add(Dense(64,'relu',input_dim=X_train.shape[1]))
model.add(Dense(64,'relu'))
model.add(Dense(1,activation='linear'))
model.compile(optimizer = 'adam',loss = 'mse',metrics=['mse','mae'])
return model
모델링
model=build_model()
중요!! 학습하기 (EarlyStopping 콜백(callback)사용하고 안하고의 차이)
이곳은 안따라하셔도 됩니다.(오래 걸림)
epoch_history = model.fit(X_train,y_train,epochs=1000,validation_split=0.2)
이렇게 에포크 1000개까지 학습합니다.
상당한 시간이 걸립니다.
이 학습한 내용을 시각화 한다면?
#학습한 후의 결과를, 보기 위해서 학습 결과의 변수에 history 변수안에 있는 데이터를 데이터 프레임으로 만들기
df_history = pd.DataFrame(epoch_history.history)
df_history
차트화
import matplotlib.pyplot as plt
def plot_history(history):
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
plt.figure(figsize=(8,12))
plt.subplot(2,1,1)
plt.xlabel('Epoch')
plt.ylabel('Mean Abs Error [MPG]')
plt.plot(hist['epoch'], hist['mae'],
label='Train Error')
plt.plot(hist['epoch'], hist['val_mae'],
label = 'Val Error')
plt.ylim([0,5])
plt.legend()
plt.subplot(2,1,2)
plt.xlabel('Epoch')
plt.ylabel('Mean Square Error [$MPG^2$]')
plt.plot(hist['epoch'], hist['mse'],
label='Train Error')
plt.plot(hist['epoch'], hist['val_mse'],
label = 'Val Error')
plt.ylim([0,20])
plt.legend()
plt.show()
plot_history(epoch_history)
그래프를 보면 수 백번 에포크를 진행한 이후에는 모델이 거의 향상되지 않는 것 같습니다.
model.fit 메서드를 수정하여 검증 점수가 향상되지 않으면 자동으로 훈련을 멈추도록 만들어줍니다.
그래서 !! EarlyStopping 콜백(callback)사용합니다!!
#위에 에포크 1000개 했다면 모델을 다시 만들어 줍니다.
model = build_model()
# 안했다면 윗부분은 건너뜁니다.
# patience= 파라미터는 성능향상을 체크할 에포크 수로서
# 10이라고 세팅하면 에포크가 10번 지났는데도 성능향상없으면, 멈추라는 뜻입니다.
early_stop=tf.keras.callbacks.EarlyStopping(monitor='val_loss',patience=10)
epoch_history = model.fit(X_train,y_train,epochs=1000,validation_split=0.2,
callbacks = [early_stop])
이번엔 에포크 172까지만 수행하고 종료됐습니다.
import matplotlib.pyplot as plt
def plot_history(history):
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
plt.figure(figsize=(8,12))
plt.subplot(2,1,1)
plt.xlabel('Epoch')
plt.ylabel('Mean Abs Error [MPG]')
plt.plot(hist['epoch'], hist['mae'],
label='Train Error')
plt.plot(hist['epoch'], hist['val_mae'],
label = 'Val Error')
plt.ylim([0,5])
plt.legend()
plt.subplot(2,1,2)
plt.xlabel('Epoch')
plt.ylabel('Mean Square Error [$MPG^2$]')
plt.plot(hist['epoch'], hist['mse'],
label='Train Error')
plt.plot(hist['epoch'], hist['val_mse'],
label = 'Val Error')
plt.ylim([0,20])
plt.legend()
plt.show()
plot_history(epoch_history)
몇번 동일한 값이 나오니 자동으로 종료했습니다.
'딥러닝' 카테고리의 다른 글
Image Data Generator 사람과 말 분류 (0) | 2022.03.29 |
---|---|
Convolutional Neural Networks (0) | 2022.03.29 |
Neural Networks (0) | 2022.03.29 |
딥러닝(tensorflow)을 이용한 자동차 구매 가격 예측 (0) | 2022.03.28 |
Fashion mnist 10개로 분류된 패션 이미지를 tensorflow를 이용해 분류하는 딥 러닝 (0) | 2021.12.06 |