Open njs03332 opened 1 year ago
# 사용할 루트 로그 디렉터리 정의
import os
root_logdir = os.path.join(os.curdir, "my_logs")
# 현재 날짜와 시간을 사용해 실행할 때마다 다른 서브디렉터리 경로를 생성하는 함수
def get_run_logdir():
import time
run_id = time.strftime("run_%Y_%m_%d-%H_%M_%S)
return os.path.join(root_logdir, run_id)
run_logdir = get_run_logdir()
# 모델 구성 & 컴파일 후
tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)
history = model.fit(X_train, y_train, epochs=30,
validation_data=(X_valid, y_valid),
callbacks=[tensorboard_cb])
TensorBoard()
콜백이 로그 디렉터리를 생성하고, 훈련하는 동안 이벤트 파일을 만들고 서머리를 기록함
# 텐서보드 서버 시작 (터미널)
$ tensorboard --logdir=./my_logs --port=6006
# 텐서보드 서버 시작 (주피터)
%load_ext tensorboard
%tensorboard --logdir=./my_logs --port=6006
텐서보드 웹 인터페이스
TensorBoard()
콜백은 임베딩 같은 추가 데이터를 로깅할 수 있는 옵션도 제공
텐서플로는 tf.summary
패키지로 저수준 API를 제공함
def build_model(n_hidden=1, n_neurons=30, learning_rate=3e-3, input_shape=[8]):
model = keras.models.Sequential()
model.add(keras.layers.InputLayer(input_shape=input_shape))
for layer in range(n_hidden):
model.add(keras.layers.Dense(n_neurons, activation="relu"))
model.add(keras.layers.Dense(1))
optimizer = keras.optimizers.SGD(learning_rate=learning_rate)
model.compile(loss="mse", optimizer=optimizer)
return model
keras_reg = keras.wrappers.scikit_learn.KerasRegressor(build_model)
keras_reg.fit(X_train, y_train, epochs=100,
validation_data=(X_valid, y_valid),
callbacks=[keras.callbacks.EarlyStopping(patience=10)]) # fit으로 학습 가능
from scipy.stats import reciprocal
from sklearn.model_selection import RandomizedSearchCV
param_distribs = {
"n_hidden": [0, 1, 2, 3],
"n_neurons": np.arange(1, 100).tolist(),
"learning_rate": reciprocal(3e-4, 3e-2).rvs(1000).tolist(),
}
rnd_search_cv = RandomizedSearchCV(keras_reg, param_distribs, n_iter=10, cv=3, verbose=2)
rnd_search_cv.fit(X_train, y_train, epochs=100,
validation_data=(X_valid, y_valid),
callbacks=[keras.callbacks.EarlyStopping(patience=10)])
# 학습...
rnd_search_cv.best_params_ # {'learning_rate': 0.005803602934201024, 'n_hidden': 3, 'n_neurons': 74}
rnd_search_cv.best_score_ # -0.3189570407072703
model = rnd_search_cv.best_estimator_.model