import optuna from optuna.integration import TensorBoardCallback def save_trial_callback(study, trial, trials_result_path): with open(trials_result_path, "a") as f: f.write( f"Trial {trial.number}: Value (F1 Macro): {trial.value}, Params: {trial.params}\n" ) def create_optuna_study(objective, n_trials, trials_result_path, tensorboard_log_dir): study = optuna.create_study(direction="maximize") # init TensorBoard callback tensorboard_callback = TensorBoardCallback( dirname=tensorboard_log_dir, metric_name="F1 Macro" ) # callback and TensorBoard callback callbacks = [ lambda study, trial: save_trial_callback(study, trial, trials_result_path), tensorboard_callback, ] study.optimize(objective, n_trials=n_trials, callbacks=callbacks) return study