from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, Conv1D, Lambda
from tensorflow.keras.losses import Huber # 시계열
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
EarlyStopping 학습이 잘 되면 빨리 끝내고 저장
ModelCheckpoint 학습이 될 때마다 저장
# 차원 만들기
model = Sequential([
# 1차원 feature map 생성
Conv1D(filters = 32, kernel_size = 5,
padding = "causal",
activation = "relu",
input_shape = [WINDOW_SIZE, 1]),
# LSTM
LSTM(16, activation = 'tanh'),
Dense(16, activation = "relu"),
Dense(1),
])
loss = Huber()
optimizer = Adam(0.0005) # 그래프에서 0점을 찾는 가장 빠른 방법
model.compile(loss = Huber(), optimizer = optimizer, metrics = ['mse'])
# 10번 epoch 동안 val_loss 개선이 없다면 학습을 멈춘다
earlystopping = EarlyStopping(monitor = 'val_loss', patience = 10)
# val_loss 기준 체크포인터도 생성
filename = os.path.join('tmp', 'checkpointer.ckpt')
checkpoint = ModelCheckpoint(filename,
save_weights_only = True,
save_best_only = True,
monitor = 'val_loss',
verbose = 1)