-
[ML] Catboost wandb에 로그 올리기인공지능 2022. 5. 22. 03:09728x90
Wandb(Weights & Biases) 란?
Wandb 는 인공지능 실험(ML, DL)을 웹에서 학습과정을 모니터링 하고, 비교분석할 수 있는 Experiment Toolkit이다.
함께 언급되는 것은 Tensorboard등이 존재한다.
Wandb는 Pytorch에서 사용시, 매 epoch을 반복할때마다 wandb.log를 사용하여 서버에 결과물을 업로드를 하는 형태를 취한다.
import wandb wandb.init(config=args) model = ... # set up your model # Magic wandb.watch(model, log_freq=100) model.train() for batch_idx, (data, target) in enumerate(train_loader): output = model(data) loss = F.nll_loss(output, target) loss.backward() optimizer.step() if batch_idx % args.log_interval == 0: wandb.log({"loss": loss}) # for문을 돌면서 학습시, 일정 조건이 있을때만 업로드
위와 같이 train_loader의 enmerate를 돌면서 반복문이 돌때, wandb.log를 사용한다.
하지만 ML, Sklearn에서는 for문을 사용해서 iteration을 돌지 않으므로 따로 반복문을 작성하여 매 iteration 정보를 wandb 서버에 올려주는 방법을 사용하기로 하였다.
앞서 Catboost의 다양한 metric을 구하기 위해 작업을 했고, 이를 wandb 서버에 올리는것이 최종 목표였다.
우선적으로 wandb를 catboost에 올려보자.
import wandb # project는 어떤 프로젝트에 속하는지, entity는 팀명 wandb.init(project="movierec_train", entity="egsbj") wandb.run.name = args.wandb_name # 내가 작업할 실험의 이름을 넣어준다. 없을 경우 wandb에서 정해준다 wandb.config.update(args)
wandb를 올릴 py파일에 해당코드를 작성해주고, catboost에서 metric을 가져오자.
custom_loss = ["AUC" , "Accuracy", "Recall", "Precision"] list_run = ['learn', 'validation'] model = CatBoostClassifier(iterations=args.iterations, loss_function=args.loss, random_seed=args.seed, custom_loss = custom_loss ) fit_model = model.fit(X_train, y_train, cat_features = cat_features, eval_set =(X_test, y_test), verbose=True) eval_result = model.get_evals_result() # metric들 모두 받아오기
eval_result는 이전 포스팅에서 활용했던 것으로, train, validation의 metric들이 모두 저장되어 있다.
eval_result의 총길이는 iteration의 숫자와 같으므로, 반복문의 길이를 iteration 숫자와 같이 하여 log를 쌓아보자.
from tqdm import tqdm for i in tqdm(range(0,args.iterations)): wandb.log({ "train_Logloss" : eval_result[list_run[0]]['Logloss'][i], "train_Accuracy" : eval_result[list_run[0]][custom_loss[1]][i], "train_Recall" : eval_result[list_run[0]][custom_loss[2]][i], "train_precision " : eval_result[list_run[0]][custom_loss[3]][i], "eval_Logloss" : eval_result[list_run[1]]['Logloss'][i], "eval_Accuracy" : eval_result[list_run[1]][custom_loss[1]][i], "eval_Recall" : eval_result[list_run[1]][custom_loss[2]][i], "eval_precision " : eval_result[list_run[1]][custom_loss[3]][i], "eval_AUC score " : eval_result[list_run[1]][custom_loss[0]][i] })
그 결과 위와 같이 Wandb에 로그가 잘 올라가게 된다!
'인공지능' 카테고리의 다른 글
[ML] Catboost train & valid metric (0) 2022.04.15