본문 바로가기
네이버클라우드/AI

AI 3일차 (2023-05-10) 인공지능 기초 - Save model, Save weight, Model Check Point

by prometedor 2023. 5. 10.

Save model

model_save (모델 구성만 저장)

tf15_model_save_california.py

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# from sklearn.datasets import load_boston  # 윤리적 문제로 제공 안 됨
from sklearn.datasets import fetch_california_housing
import time


# 1. 데이터
# datasets = load_boston()
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

print(datasets.feature_names)
# ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

print(datasets.DESCR)   # DESCR 세부적으로 보겠다
# 속성 정보:
# - 그룹의 중위수 소득
# - 그룹의 주택 연령 중위수
# - 가구당 평균 객실 수
# - 평균 가구당 침실 수
# - 모집단 그룹 모집단
# - 평균 가구원수
# - Latitude 그룹 위도
# - 경도 그룹 경도

print(x.shape)  # (20640, 8)
print(y.shape)  # (20640,)

x_train, x_test, y_train, y_test = train_test_split(
    x, y, train_size=0.6, test_size=0.2, random_state=100, shuffle=True
)

print(x_train.shape)    # (14447, 8)    # 8(열) - input_dim
print(y_train.shape)    # (14447,)


# 2. 모델구성
model = Sequential()
model.add(Dense(100, input_dim = 8))
model.add(Dense(100))
model.add(Dense(50))
model.add(Dense(20))
model.add(Dense(10))
model.add(Dense(1))     # 주택 가격

model.save('./_save/tf15_california.h5')   # h5 로 모델 저장

# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')

## EarlyStopping
from keras.callbacks import EarlyStopping

earlyStopping = EarlyStopping(monitor='val_loss', patience=100, mode='min',  # mode='auto'가 기본, patience=100 --> 100부터 줄여나가자
                              verbose=1, restore_best_weights=True) # restore_best_weights --> default 는 False 이므로 True 로 꼭!!! 변경!!!  

start_time = time.time()
hist = model.fit(x_train, y_train, epochs=5000, batch_size=200,      #batch_size 커야 훈련시간 단축됨
          validation_split=0.2,  # validation data => 0.2 (train 0.6 / test 0.2)
          callbacks=[earlyStopping],
          verbose=1)    
end_time = time.time() - start_time


# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)
r2 = r2_score(y_test, y_predict)
print('loss : ', loss)
print('r2스코어 : ', r2)
print('걸린 시간 : ', end_time)


#===============================================#
# Epoch 934: early stopping
# loss :  0.5884049534797668
# r2스코어 :  0.5633025059529055
# 걸린 시간 :  92.88903450965881

 

model.save('./_save/tf15_california.h5')   # h5 로 모델 저장

ㄴ 현재 파일의 위치에 _save 라는 폴더에 tf15_california.h5 라는 이름으로 h5 파일형식으로 모델 저장

 

 

 

model_load

tf15_model_load_california.py

import numpy as np
from keras.models import Sequential, load_model # load_model 추가
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# from sklearn.datasets import load_boston  # 윤리적 문제로 제공 안 됨
from sklearn.datasets import fetch_california_housing
import time


# 1. 데이터
# datasets = load_boston()
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

print(datasets.feature_names)
# ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

print(datasets.DESCR)   # DESCR 세부적으로 보겠다
# 속성 정보:
# - 그룹의 중위수 소득
# - 그룹의 주택 연령 중위수
# - 가구당 평균 객실 수
# - 평균 가구당 침실 수
# - 모집단 그룹 모집단
# - 평균 가구원수
# - Latitude 그룹 위도
# - 경도 그룹 경도

print(x.shape)  # (20640, 8)
print(y.shape)  # (20640,)

x_train, x_test, y_train, y_test = train_test_split(
    x, y, train_size=0.6, test_size=0.2, random_state=100, shuffle=True
)

print(x_train.shape)    # (14447, 8)    # 8(열) - input_dim
print(y_train.shape)    # (14447,)


# 2. 모델구성
# model = Sequential()
# model.add(Dense(100, input_dim = 8))
# model.add(Dense(100))
# model.add(Dense(50))
# model.add(Dense(20))
# model.add(Dense(10))
# model.add(Dense(1))     # 주택 가격

# model.save('./_save/tf15_california.h5')   # h5 로 모델 저장(대용량 데이터를 저장하기 위한 파일 형식 중 하나)
model = load_model('./_save/tf15_california.h5')

# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')

## EarlyStopping
from keras.callbacks import EarlyStopping

earlyStopping = EarlyStopping(monitor='val_loss', patience=100, mode='min',  # mode='auto'가 기본, patience=100 --> 100부터 줄여나가기
                              verbose=1, restore_best_weights=True) # restore_best_weights --> default 는 False 이므로 True 로 꼭!!! 변경!!!  

start_time = time.time()
hist = model.fit(x_train, y_train, epochs=5000, batch_size=200,      #batch_size 커야 훈련시간 단축됨
          validation_split=0.2,  # validation data => 0.2 (train 0.6 / test 0.2)
          callbacks=[earlyStopping],
          verbose=1)    
end_time = time.time() - start_time


# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)
r2 = r2_score(y_test, y_predict)
print('loss : ', loss)
print('r2스코어 : ', r2)
print('걸린 시간 : ', end_time)


#===============================================#
# Epoch 1740: early stopping
# loss :  0.5770300626754761
# r2스코어 :  0.5717446507580306
# 걸린 시간 :  172.3957302570343

 

from keras.models import Sequential, load_model

model = load_model('./_save/tf15_california.h5')

현재 파일의 위치에 _save 라는 폴더에 저장한 tf15_california.h5 파일을 불러와서 load

 

=> 'tf15_model_save_california.py' 에서 모델 구성 save 했으므로 없어도 실행됨  --> 주석으로 처리함

 

 

model_save (모델구성과 컴파일 모두 저장)

tf16_model_save_california.py

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# from sklearn.datasets import load_boston  # 윤리적 문제로 제공 안 됨
from sklearn.datasets import fetch_california_housing
import time


# 1. 데이터
# datasets = load_boston()
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

print(datasets.feature_names)
# ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

print(datasets.DESCR)   # DESCR 세부적으로 보겠다
# 속성 정보:
# - 그룹의 중위수 소득
# - 그룹의 주택 연령 중위수
# - 가구당 평균 객실 수
# - 평균 가구당 침실 수
# - 모집단 그룹 모집단
# - 평균 가구원수
# - Latitude 그룹 위도
# - 경도 그룹 경도

print(x.shape)  # (20640, 8)
print(y.shape)  # (20640,)

x_train, x_test, y_train, y_test = train_test_split(
    x, y, train_size=0.6, test_size=0.2, random_state=100, shuffle=True
)

print(x_train.shape)    # (14447, 8)    # 8(열) - input_dim
print(y_train.shape)    # (14447,)


# 2. 모델구성
model = Sequential()
model.add(Dense(100, input_dim = 8))
model.add(Dense(100))
model.add(Dense(50))
model.add(Dense(20))
model.add(Dense(10))
model.add(Dense(1))     # 주택 가격

# model.save('./_save/tf15_california.h5')   # h5 로 모델 저장

# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')

## EarlyStopping
from keras.callbacks import EarlyStopping

earlyStopping = EarlyStopping(monitor='val_loss', patience=100, mode='min',  # mode='auto'가 기본, patience=100 --> 100부터 줄여나가기
                              verbose=1, restore_best_weights=True) # restore_best_weights --> default 는 False 이므로 True 로 꼭!!! 변경!!!  

start_time = time.time()
hist = model.fit(x_train, y_train, epochs=5000, batch_size=200,      #batch_size 커야 훈련시간 단축됨
          validation_split=0.2,  # validation data => 0.2 (train 0.6 / test 0.2)
          callbacks=[earlyStopping],
          verbose=1)    
end_time = time.time() - start_time

model.save('./_save/tf16_california.h5')    # fit 하고 난 다음에 weight 가 나옴

# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)
r2 = r2_score(y_test, y_predict)
print('loss : ', loss)
print('r2스코어 : ', r2)
print('걸린 시간 : ', end_time)


#===============================================#
# Epoch 241: early stopping
# loss :  0.632347822189331
# r2스코어 :  0.5306894270982916
# 걸린 시간 :  24.353583097457886

ㄴ model.save('./_save/tf16_california.h5')     #  fit 하고 난 다음에 weight 가 나옴

= > 현재 파일의 위치에 _save 라는 폴더에 tf16_california.h5 라는 이름으로 h5 파일형식으로 모델 저장

 

 

model_load

tf16_model_load_california.py

import numpy as np
from keras.models import Sequential, load_model # load_model 추가
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# from sklearn.datasets import load_boston  # 윤리적 문제로 제공 안 됨
from sklearn.datasets import fetch_california_housing
import time


# 1. 데이터
# datasets = load_boston()
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

print(datasets.feature_names)
# ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

print(datasets.DESCR)   # DESCR 세부적으로 보겠다
# 속성 정보:
# - 그룹의 중위수 소득
# - 그룹의 주택 연령 중위수
# - 가구당 평균 객실 수
# - 평균 가구당 침실 수
# - 모집단 그룹 모집단
# - 평균 가구원수
# - Latitude 그룹 위도
# - 경도 그룹 경도

print(x.shape)  # (20640, 8)
print(y.shape)  # (20640,)

x_train, x_test, y_train, y_test = train_test_split(
    x, y, train_size=0.6, test_size=0.2, random_state=100, shuffle=True
)

print(x_train.shape)    # (14447, 8)    # 8(열) - input_dim
print(y_train.shape)    # (14447,)


# 2. 모델구성
# model = Sequential()
# model.add(Dense(100, input_dim = 8))
# model.add(Dense(100))
# model.add(Dense(50))
# model.add(Dense(20))
# model.add(Dense(10))
# model.add(Dense(1))     # 주택 가격

# model.save('./_save/tf15_california.h5')   # h5 로 모델 저장(대용량 데이터를 저장하기 위한 파일 형식 중 하나)
# model = load_model('./_save/tf15_california.h5')

# 3. 컴파일, 훈련
# model.compile(loss='mse', optimizer='adam')

# ## EarlyStopping
# from keras.callbacks import EarlyStopping

# earlyStopping = EarlyStopping(monitor='val_loss', patience=100, mode='min',  # mode='auto'가 기본, patience=100 --> 100부터 줄여나가기
#                               verbose=1, restore_best_weights=True) # restore_best_weights --> default 는 False 이므로 True 로 꼭!!! 변경!!!  

# start_time = time.time()
# hist = model.fit(x_train, y_train, epochs=5000, batch_size=200,      #batch_size 커야 훈련시간 단축됨
#           validation_split=0.2,  # validation data => 0.2 (train 0.6 / test 0.2)
#           callbacks=[earlyStopping],
#           verbose=1)    
# end_time = time.time() - start_time

model = load_model('./_save/tf16_california.h5')

# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)
r2 = r2_score(y_test, y_predict)
print('loss : ', loss)
print('r2스코어 : ', r2)
# print('걸린 시간 : ', end_time)


#===============================================#
loss :  0.632347822189331
r2스코어 :  0.5306894270982916

from keras.models import Sequential, load_model

model = load_model('./_save/tf16_california.h5')
ㄴ 현재 파일의 위치에 _save 라는 폴더에 저장한 tf16_california.h5 파일을 불러와서 load

=> 'tf16_model_save_california.py' 에서 모델 구성과 컴파일 모두 save 했으므로 없어도 실행됨  --> 주석으로 처리함

=> 'tf16_model_save_california.py' 에서 save 시 출력됐던 값과 같은 값 출력됨

 

 

 

 

Save weight

weight_save

tf17_weight_save_california.py

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# from sklearn.datasets import load_boston  # 윤리적 문제로 제공 안 됨
from sklearn.datasets import fetch_california_housing
import time


# 1. 데이터
# datasets = load_boston()
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

print(datasets.feature_names)
# ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

print(datasets.DESCR)   # DESCR 세부적으로 보겠다
# 속성 정보:
# - 그룹의 중위수 소득
# - 그룹의 주택 연령 중위수
# - 가구당 평균 객실 수
# - 평균 가구당 침실 수
# - 모집단 그룹 모집단
# - 평균 가구원수
# - Latitude 그룹 위도
# - 경도 그룹 경도

print(x.shape)  # (20640, 8)
print(y.shape)  # (20640,)

x_train, x_test, y_train, y_test = train_test_split(
    x, y, train_size=0.6, test_size=0.2, random_state=100, shuffle=True
)

print(x_train.shape)    # (14447, 8)    # 8(열) - input_dim
print(y_train.shape)    # (14447,)


# 2. 모델구성
model = Sequential()
model.add(Dense(100, input_dim = 8))
model.add(Dense(100))
model.add(Dense(50))
model.add(Dense(20))
model.add(Dense(10))
model.add(Dense(1))     # 주택 가격

# model.save('./_save/tf15_california.h5')   # h5 로 모델 저장

# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')

## EarlyStopping
from keras.callbacks import EarlyStopping

earlyStopping = EarlyStopping(monitor='val_loss', patience=100, mode='min',  # mode='auto'가 기본, patience=100 --> 100부터 줄여나가기
                              verbose=1, restore_best_weights=True) # restore_best_weights --> default 는 False 이므로 True 로 꼭!!! 변경!!!  

start_time = time.time()
hist = model.fit(x_train, y_train, epochs=5000, batch_size=200,      #batch_size 커야 훈련시간 단축됨
          validation_split=0.2,  # validation data => 0.2 (train 0.6 / test 0.2)
          callbacks=[earlyStopping],
          verbose=1)    
end_time = time.time() - start_time

model.save_weights('./_save/tf17_weight_california.h5')

# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)
r2 = r2_score(y_test, y_predict)
print('loss : ', loss)
print('r2스코어 : ', r2)
print('걸린 시간 : ', end_time)


#===============================================#
# Epoch 308: early stopping
# loss :  0.613144040107727
# r2스코어 :  0.5449418800495929
# 걸린 시간 :  32.30460834503174

 

model.save_weights('./_save/tf17_weight_california.h5')   # h5 로 모델 저장
ㄴ 현재 파일의 위치에 _save 라는 폴더에 tf17_weight_california.h5 라는 이름으로 h5 파일형식으로 모델 저장

= > 좋은 weight 값을 계속 저장해서 그 중에 가장 적합한 값을 저장

 

weight_load

tf17_weight_load_california.py

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# from sklearn.datasets import load_boston  # 윤리적 문제로 제공 안 됨
from sklearn.datasets import fetch_california_housing
import time


# 1. 데이터
# datasets = load_boston()
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

print(datasets.feature_names)
# ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

print(datasets.DESCR)   # DESCR 세부적으로 보겠다
# 속성 정보:
# - 그룹의 중위수 소득
# - 그룹의 주택 연령 중위수
# - 가구당 평균 객실 수
# - 평균 가구당 침실 수
# - 모집단 그룹 모집단
# - 평균 가구원수
# - Latitude 그룹 위도
# - 경도 그룹 경도

print(x.shape)  # (20640, 8)
print(y.shape)  # (20640,)

x_train, x_test, y_train, y_test = train_test_split(
    x, y, train_size=0.6, test_size=0.2, random_state=100, shuffle=True
)

print(x_train.shape)    # (14447, 8)    # 8(열) - input_dim
print(y_train.shape)    # (14447,)


# 2. 모델구성   # weight 값만 저장했으므로 주석처리하면 안 됨
model = Sequential()
model.add(Dense(100, input_dim = 8))
model.add(Dense(100))
model.add(Dense(50))
model.add(Dense(20))
model.add(Dense(10))
model.add(Dense(1))     # 주택 가격

# model.save('./_save/tf15_california.h5')   # h5 로 모델 저장
model.load_weights('./_save/tf17_weight_california.h5')

# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')

''' # weight 값만 저장했으므로 --> 모델, 컴파일 모두 주석처리 하면 안 됨
## EarlyStopping
from keras.callbacks import EarlyStopping

earlyStopping = EarlyStopping(monitor='val_loss', patience=100, mode='min',  # mode='auto'가 기본, patience=100 --> 100부터 줄여나가기
                              verbose=1, restore_best_weights=True) # restore_best_weights --> default 는 False 이므로 True 로 꼭!!! 변경!!!  

start_time = time.time()
hist = model.fit(x_train, y_train, epochs=5000, batch_size=200,      #batch_size 커야 훈련시간 단축됨
          validation_split=0.2,  # validation data => 0.2 (train 0.6 / test 0.2)
          callbacks=[earlyStopping],
          verbose=1)    
end_time = time.time() - start_time

model.save_weights('./_save/tf17_weight_california.h5')
'''

# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)
r2 = r2_score(y_test, y_predict)
print('loss : ', loss)
print('r2스코어 : ', r2)
# print('걸린 시간 : ', end_time)


#===============================================#
loss :  0.613144040107727
r2스코어 :  0.5449418800495929

 

from keras.models import Sequential, load_model
model.load_weights('./_save/tf17_weight_california.h5')
ㄴ 현재 파일의 위치에 _save 라는 폴더에 저장한 tf17_weight_california.h5 파일을 불러와서 weight 값을 load


=> 'tf17_weight_save_california.py' 에서 weight 값만 저장했으므로 모델구성과 컴파일을 주석처리하면 실행 안 됨
=> 'tf17_weight_save_california.py' 에서 save 시 저장된 weight 값 출력

 

 

 

Model Check Point

# Model Check Point
mcp = ModelCheckpoint(
    monitor='val_loss',
    mode='auto',
    verbose=1,
    # save_weights_only=False,
    save_best_only=True,
    filepath='./_mcp/tf18_california.hdf5'
)

 

MCP_Save

tf18_MCP_save_california.py

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# from sklearn.datasets import load_boston  # 윤리적 문제로 제공 안 됨
from sklearn.datasets import fetch_california_housing
import time


# 1. 데이터
# datasets = load_boston()
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

print(datasets.feature_names)
# ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

print(datasets.DESCR)   # DESCR 세부적으로 보겠다
# 속성 정보:
# - 그룹의 중위수 소득
# - 그룹의 주택 연령 중위수
# - 가구당 평균 객실 수
# - 평균 가구당 침실 수
# - 모집단 그룹 모집단
# - 평균 가구원수
# - Latitude 그룹 위도
# - 경도 그룹 경도

print(x.shape)  # (20640, 8)
print(y.shape)  # (20640,)

x_train, x_test, y_train, y_test = train_test_split(
    x, y, train_size=0.6, test_size=0.2, random_state=100, shuffle=True
)

print(x_train.shape)    # (14447, 8)    # 8(열) - input_dim
print(y_train.shape)    # (14447,)


# 2. 모델구성
model = Sequential()
model.add(Dense(100, input_dim = 8))
model.add(Dense(100))
model.add(Dense(50))
model.add(Dense(20))
model.add(Dense(10))
model.add(Dense(1))     # 주택 가격

# model.save('./_save/tf15_california.h5')   # h5 로 모델 저장

# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')

## EarlyStopping
from keras.callbacks import EarlyStopping, ModelCheckpoint

earlyStopping = EarlyStopping(monitor='val_loss', patience=100, mode='min',  # mode='auto'가 기본, patience=100 --> 100부터 줄여나가기
                              verbose=1, restore_best_weights=True) # restore_best_weights --> default 는 False 이므로 True 로 꼭!!! 변경!!!  

# Model Check Point
mcp = ModelCheckpoint(
    monitor='val_loss',
    mode='auto',
    verbose=1,
    # save_weights_only=False,
    save_best_only=True,
    filepath='./_mcp/tf18_california.hdf5'
)

start_time = time.time()
hist = model.fit(x_train, y_train, epochs=5000, batch_size=200,      #batch_size 커야 훈련시간 단축됨
          validation_split=0.2,  # validation data => 0.2 (train 0.6 / test 0.2)
          callbacks=[earlyStopping, mcp],
          verbose=1)    
end_time = time.time() - start_time

# model.save_weights('./_save/tf17_weight_california.h5')

# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)
r2 = r2_score(y_test, y_predict)
print('loss : ', loss)
print('r2스코어 : ', r2)
print('걸린 시간 : ', end_time)


#===============================================#
# Epoch 290: early stopping
# loss :  0.6246613264083862
# r2스코어 :  0.5363941351322884
# 걸린 시간 :  30.5333194732666

 

model.save_weights('./_save/tf18_california.hdf5')   # h5 로 모델 저장
ㄴ 현재 파일의 위치에 _save 라는 폴더에 tf18_california.hdf5 라는 이름으로 h5 파일형식으로 모델 저장

= > 좋은 weight 값을 계속 저장해서 그 중에 가장 적합한 값을 저장

 

 

MCP_load

** 주의 : hdf5 형식으로 저장하기

tf18_MCP_load_california.py

import numpy as np
from keras.models import Sequential, load_model
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# from sklearn.datasets import load_boston  # 윤리적 문제로 제공 안 됨
from sklearn.datasets import fetch_california_housing
import time


# 1. 데이터
# datasets = load_boston()
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target

print(datasets.feature_names)
# ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

print(datasets.DESCR)   # DESCR 세부적으로 보겠다
# 속성 정보:
# - 그룹의 중위수 소득
# - 그룹의 주택 연령 중위수
# - 가구당 평균 객실 수
# - 평균 가구당 침실 수
# - 모집단 그룹 모집단
# - 평균 가구원수
# - Latitude 그룹 위도
# - 경도 그룹 경도

print(x.shape)  # (20640, 8)
print(y.shape)  # (20640,)

x_train, x_test, y_train, y_test = train_test_split(
    x, y, train_size=0.6, test_size=0.2, random_state=100, shuffle=True
)

print(x_train.shape)    # (14447, 8)    # 8(열) - input_dim
print(y_train.shape)    # (14447,)


# 2. 모델구성
# model = Sequential()
# model.add(Dense(100, input_dim = 8))
# model.add(Dense(100))
# model.add(Dense(50))
# model.add(Dense(20))
# model.add(Dense(10))
# model.add(Dense(1))     # 주택 가격

# model.save('./_save/tf15_california.h5')   # h5 로 모델 저장

# 3. 컴파일, 훈련
# model.compile(loss='mse', optimizer='adam')

# ## EarlyStopping
# from keras.callbacks import EarlyStopping, ModelCheckpoint

# earlyStopping = EarlyStopping(monitor='val_loss', patience=100, mode='min',  # mode='auto'가 기본, patience=100 --> 100부터 줄여나가기
#                               verbose=1, restore_best_weights=True) # restore_best_weights --> default 는 False 이므로 True 로 꼭!!! 변경!!!  

# Model Check Point
# mcp = ModelCheckpoint(
#     monitor='val_loss',
#     mode='auto',
#     verbose=1,
#     save_best_only=True,
#     filepath='./_mcp/tf18_california.hdf5'
# )

# start_time = time.time()
# hist = model.fit(x_train, y_train, epochs=5000, batch_size=200,      #batch_size 커야 훈련시간 단축됨
#           validation_split=0.2,  # validation data => 0.2 (train 0.6 / test 0.2)
#           callbacks=[earlyStopping, mcp],
#           verbose=1)    
# end_time = time.time() - start_time

# model.save_weights('./_save/tf17_weight_california.h5')

model = load_model('./_mcp/tf18_california.hdf5')

# 4. 평가, 예측
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x_test)
r2 = r2_score(y_test, y_predict)
print('loss : ', loss)
print('r2스코어 : ', r2)
# print('걸린 시간 : ', end_time)


#===============================================#
loss :  0.6246613264083862
r2스코어 :  0.5363941351322884

 

from keras.models import Sequential, load_model
model = load_model('./_mcp/tf18_california.hdf5')
ㄴ 현재 파일의 위치에 _save 라는 폴더에 저장한 tf18_california.hdf5 파일을 불러와서 weight 값을 load

=> 'tf18_MCP_save_california.py' 에서 weight 값만 저장했으므로 모델구성과 컴파일을 주석처리하면 실행 안 됨
=> 'tf18_MCP_save_california.py' 에서 save 시 저장된 weight 값 출력