mirror of
https://github.com/wassname/attentive-neural-processes.git
synced 2026-08-17 11:15:34 +08:00
363 KiB
363 KiB
In [3]:
import sys, re, os, itertools, functools, collections
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import collections
from pathlib import Path
from tqdm.auto import tqdm
import optuna
import pytorch_lightning as pl
from optuna.integration import PyTorchLightningPruningCallback
import math
%matplotlib inline
%reload_ext autoreload
%autoreload 2In [4]:
import logging
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logger = logging.getLogger("RANP.ipynb")In [5]:
import torch
from torch import nn
import torch.nn.functional as FIn [6]:
from src.models.model import LatentModel
from src.data.smart_meter import collate_fns, SmartMeterDataSet, get_smartmeter_df
from src.plot import plot_from_loader
from src.models.lightning_anp import LatentModelPL
from src.dict_logger import DictLoggerIn [7]:
# Params
device='cuda'
use_logy=FalseIn [8]:
df_train, df_test = get_smartmeter_df()In [9]:
# Show split
df_train['energy(kWh/hh)'].plot(label='train')
df_test['energy(kWh/hh)'].plot(label='test')
plt.title('energy(kWh/hh)')
plt.legend()Out [9]:
<matplotlib.legend.Legend at 0x7fb08889a7b8>
In [ ]:
In [13]:
PERCENT_TEST_EXAMPLES = 0.3
EPOCHS = 5
DIR = Path(os.getcwd())
MODEL_DIR = DIR/ 'optuna_result'/ 'ranp'
name = 'ranp' # study name
MODEL_DIR.mkdir(parents=True, exist_ok=True)
print(f"now run `tensorboard --logdir {MODEL_DIR}")now run `tensorboard --logdir /media/wassname/Storage5/projects2/3ST/attentive-neural-processes/optuna_result/ranp
In [ ]:
In [14]:
def main(trial, train=True):
checkpoint_callback = pl.callbacks.ModelCheckpoint(
os.path.join(MODEL_DIR, name, 'version_{}'.format(trial.number), "chk"), monitor='val_loss', mode="min")
# The default logger in PyTorch Lightning writes to event files to be consumed by
# TensorBoard. We create a simple logger instead that holds the log in memory so that the
# final accuracy can be obtained after optimization. When using the default logger, the
# final accuracy could be stored in an attribute of the `Trainer` instead.
logger = DictLogger(MODEL_DIR, name="anp", version=trial.number)
trainer = pl.Trainer(
logger=logger,
val_percent_check=PERCENT_TEST_EXAMPLES,
gradient_clip_val=trial.params["grad_clip"],
checkpoint_callback=checkpoint_callback,
max_epochs=trial.params['max_nb_epochs'],
gpus=-1 if torch.cuda.is_available() else None,
early_stop_callback=PyTorchLightningPruningCallback(trial, monitor='val_loss')
)
model = LatentModelPL(trial.params)
if train:
trainer.fit(model)
return model, trainer
def add_sugg(trial):
trial.suggest_loguniform("learning_rate", 1e-5, 1e-2)
trial.suggest_categorical("hidden_dim", [8*2**i for i in range(6)])
trial.suggest_categorical("latent_dim", [8*2**i for i in range(6)])
trial.suggest_int("attention_layers", 1, 4)
trial.suggest_categorical("n_latent_encoder_layers", [1, 2, 4, 8])
trial.suggest_categorical("n_det_encoder_layers", [1, 2, 4, 8])
trial.suggest_categorical("n_decoder_layers", [1, 2, 4, 8])
# trial.suggest_uniform("dropout", 0, 0.75)
# trial.suggest_uniform("attention_dropout", 0, 0.75)
trial.suggest_categorical("dropout", [0, 0.2, 0.5])
trial.suggest_categorical("attention_dropout", [0, 0.2, 0.5])
trial.suggest_categorical(
"latent_enc_self_attn_type", ['multihead', 'ptmultihead']
)
# trial.suggest_categorical(
# "latent_enc_self_attn_type", ['uniform', 'dot', 'multihead', 'ptmultihead']
# )
# trial.suggest_categorical("det_enc_self_attn_type", ['uniform', 'dot', 'multihead', 'ptmultihead'])
# trial.suggest_categorical("det_enc_cross_attn_type", ['uniform', 'dot', 'multihead', 'ptmultihead'])
trial.suggest_categorical("det_enc_self_attn_type", ['multihead', 'ptmultihead'])
trial.suggest_categorical("det_enc_cross_attn_type", ['multihead', 'ptmultihead'])
trial.suggest_categorical("batchnorm", [False, True])
trial.suggest_categorical("use_self_attn", [False, True])
trial.suggest_categorical("use_lvar", [False, True])
trial.suggest_categorical("use_deterministic_path", [False, True])
# training specific (for this model)
trial.suggest_uniform("min_std", 0.005, 0.005)
trial.suggest_int("grad_clip", 40, 40)
trial.suggest_int("num_context", 24 * 6, 24 * 6)
trial.suggest_int("num_extra_target", 24*2, 24*2)
trial.suggest_int("max_nb_epochs", 10, 10)
trial.suggest_int("num_workers", 3, 3)
trial.suggest_int("batch_size", 16, 16)
trial.suggest_int("num_heads", 8, 8)
trial.suggest_int("x_dim", 17, 17)
trial.suggest_int("y_dim", 1, 1)
trial.suggest_int("vis_i", 670, 670)
return trial
def objective(trial):
# see https://github.com/optuna/optuna/blob/cf6f02d/examples/pytorch_lightning_simple.py
trial = add_sugg(trial)
print('trial', trial.number, 'params', trial.params)
# PyTorch Lightning will try to restore model parameters from previous trials if checkpoint
# filenames match. Therefore, the filenames for each trial must be made unique.
model, trainer = main(trial)
# also report to tensorboard & print
print('logger.metrics', model.logger.metrics[-1:])
model.logger.experiment.add_hparams(trial.params, model.logger.metrics[-1])
return model.logger.metrics[-1]['val_loss']
In [14]:
trial = optuna.trial.FixedTrial({'attention_dropout': 0.2,
'attention_layers': 2,
'batch_size': 16,
'batchnorm': False,
'det_enc_cross_attn_type': 'multihead',
'det_enc_self_attn_type': 'ptmultihead',
'dropout': 0,
'grad_clip': 40,
'hidden_dim': 64,
'latent_dim': 64,
'latent_enc_self_attn_type': 'multihead',
'learning_rate': 0.0019,
'max_nb_epochs': 10,
'min_std': 0.005,
'n_decoder_layers': 2,
'n_det_encoder_layers': 8,
'n_latent_encoder_layers': 1,
'num_context': 24*6,
'num_extra_target': 24*2,
'num_heads': 8,
'num_workers': 3,
'use_deterministic_path': False,
'use_lvar': True,
'use_self_attn': True,
'vis_i': '670',
'x_dim': 17,
'y_dim': 1,
})
trial = add_sugg(trial)
trial.number = 1In [15]:
checkpoint_callback = pl.callbacks.ModelCheckpoint(
os.path.join(MODEL_DIR, name, 'version_{}'.format(trial.number), "chk"), monitor='val_loss', mode="min")
logger = DictLogger(MODEL_DIR, name="anp", version=trial.number)
trainer = pl.Trainer(
gradient_clip_val=trial.params["grad_clip"],
checkpoint_callback=checkpoint_callback,
max_epochs=trial.params['max_nb_epochs'],
gpus=-1 if torch.cuda.is_available() else None,
early_stop_callback=True
)
model = LatentModelPL(trial.params)
trainer.fit(model)Out [15]:
/media/wassname/Storage5/projects2/3ST/pytorch-lightning/pytorch_lightning/callbacks/pt_callbacks.py:239: UserWarning:
Checkpoint directory /media/wassname/Storage5/projects2/3ST/attentive-neural-processes/optuna_result/anp3/anp2/version_1002/chk exists and is not empty with save_top_k != 0.All files in this directory will be deleted when a checkpoint is saved!
INFO:root:gpu available: True, used: True
INFO:root:VISIBLE GPUS: 0
INFO:root:
Name Type Params
0 model LatentModel 374 K
1 model._latent_encoder LatentEncoder 148 K
2 model._latent_encoder._input_layer Linear 1 K
3 model._latent_encoder._encoder ModuleList 4 K
4 model._latent_encoder._encoder.0 NPBlockRelu2d 4 K
.. ... ... ...
179 model._decoder._decoder.1.linear Linear 16 K
180 model._decoder._decoder.1.act ReLU 0
181 model._decoder._decoder.1.dropout Dropout2d 0
182 model._decoder._mean Linear 129
183 model._decoder._std Linear 129
[184 rows x 3 columns]
INFO:root:model and trainer restored from checkpoint: /media/wassname/Storage5/projects2/3ST/attentive-neural-processes/optuna_result/anp3/anp2/version_1002/chk/_ckpt_epoch_1.ckpt
HBox(children=(FloatProgress(value=0.0, description='Validation sanity check', layout=Layout(flex='2'), max=5.…
step 4403, {'val_loss': '115.8714599609375', 'val/kl': '0.040124934166669846', 'val/mse': '8.647311210632324', 'val/std': '0.18496380746364594'}
HBox(children=(FloatProgress(value=1.0, bar_style='info', layout=Layout(flex='2'), max=1.0), HTML(value='')), …
HBox(children=(FloatProgress(value=0.0, description='Validating', layout=Layout(flex='2'), max=234.0, style=Pr…
step 6597, {'val_loss': '-1.337040662765503', 'val/kl': '0.0005833097966387868', 'val/mse': '0.005153971258550882', 'val/std': '0.07907649874687195'}
HBox(children=(FloatProgress(value=0.0, description='Validating', layout=Layout(flex='2'), max=234.0, style=Pr…
step 8792, {'val_loss': '-1.4710036516189575', 'val/kl': '0.0004436351009644568', 'val/mse': '0.0037921438924968243', 'val/std': '0.061363283544778824'}
HBox(children=(FloatProgress(value=0.0, description='Validating', layout=Layout(flex='2'), max=234.0, style=Pr…
step 10987, {'val_loss': '-1.4116109609603882', 'val/kl': '0.000349979818565771', 'val/mse': '0.0038589625619351864', 'val/std': '0.05318635329604149'}
INFO:root:Epoch 00004: early stopping
1
In [19]:
# plot
loader = model.val_dataloader()[0]
vis_i=670
plot_from_loader(loader, model, i=vis_i)Out [19]:
tensor(-1.0789, device='cuda:0')
In [17]:
# test
trainer.test(model)INFO:root:
Name Type Params
0 model LatentModel 374 K
1 model._latent_encoder LatentEncoder 148 K
2 model._latent_encoder._input_layer Linear 1 K
3 model._latent_encoder._encoder ModuleList 4 K
4 model._latent_encoder._encoder.0 NPBlockRelu2d 4 K
.. ... ... ...
179 model._decoder._decoder.1.linear Linear 16 K
180 model._decoder._decoder.1.act ReLU 0
181 model._decoder._decoder.1.dropout Dropout2d 0
182 model._decoder._mean Linear 129
183 model._decoder._std Linear 129
[184 rows x 3 columns]
INFO:root:model and trainer restored from checkpoint: /media/wassname/Storage5/projects2/3ST/attentive-neural-processes/optuna_result/anp3/anp2/version_1002/chk/_ckpt_epoch_2.ckpt
HBox(children=(FloatProgress(value=0.0, description='Testing', layout=Layout(flex='2'), max=234.0, style=Progr…
step 8792, {'val_loss': '-1.4710036516189575', 'val/kl': '0.0004436351009644568', 'val/mse': '0.0037921438924968243', 'val/std': '0.061363283544778824'}
In [12]:
import argparse
parser = argparse.ArgumentParser(description='PyTorch Lightning example.')
parser.add_argument('--pruning', '-p', action='store_true',
help='Activate the pruning feature. `MedianPruner` stops unpromising '
'trials at the early stages of training.')
args = parser.parse_args(['-p'])
pruner = optuna.pruners.MedianPruner() if args.pruning else optuna.pruners.NopPruner()
study = optuna.create_study(direction='minimize', pruner=pruner, storage=f'sqlite:///optuna_result/{name}.db', study_name=name, load_if_exists=True)
[I 2020-02-15 07:26:14,685] Using an existing study with name 'anp2' instead of creating a new one.
In [12]:
study.optimize(objective, n_trials=200, timeout=pd.Timedelta('2d').total_seconds())[0;31m---------------------------------------------------------------------------[0m
[0;31mKeyboardInterrupt[0m Traceback (most recent call last)
[0;32m<ipython-input-12-d34fa1166ee6>[0m in [0;36m<module>[0;34m[0m
[0;32m----> 1[0;31m [0mstudy[0m[0;34m.[0m[0moptimize[0m[0;34m([0m[0mobjective[0m[0;34m,[0m [0mn_trials[0m[0;34m=[0m[0;36m200[0m[0;34m,[0m [0mtimeout[0m[0;34m=[0m[0mpd[0m[0;34m.[0m[0mTimedelta[0m[0;34m([0m[0;34m'2d'[0m[0;34m)[0m[0;34m.[0m[0mtotal_seconds[0m[0;34m([0m[0;34m)[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/study.py[0m in [0;36moptimize[0;34m(self, func, n_trials, timeout, n_jobs, catch, callbacks, gc_after_trial)[0m
[1;32m 300[0m [0;32mif[0m [0mn_jobs[0m [0;34m==[0m [0;36m1[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 301[0m self._optimize_sequential(func, n_trials, timeout, catch, callbacks,
[0;32m--> 302[0;31m gc_after_trial, None)
[0m[1;32m 303[0m [0;32melse[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 304[0m [0mtime_start[0m [0;34m=[0m [0mdatetime[0m[0;34m.[0m[0mdatetime[0m[0;34m.[0m[0mnow[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/study.py[0m in [0;36m_optimize_sequential[0;34m(self, func, n_trials, timeout, catch, callbacks, gc_after_trial, time_start)[0m
[1;32m 536[0m [0;32mbreak[0m[0;34m[0m[0;34m[0m[0m
[1;32m 537[0m [0;34m[0m[0m
[0;32m--> 538[0;31m [0mself[0m[0;34m.[0m[0m_run_trial_and_callbacks[0m[0;34m([0m[0mfunc[0m[0;34m,[0m [0mcatch[0m[0;34m,[0m [0mcallbacks[0m[0;34m,[0m [0mgc_after_trial[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 539[0m [0mself[0m[0;34m.[0m[0m_storage[0m[0;34m.[0m[0mremove_session[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 540[0m [0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/study.py[0m in [0;36m_run_trial_and_callbacks[0;34m(self, func, catch, callbacks, gc_after_trial)[0m
[1;32m 548[0m [0;31m# type: (...) -> None[0m[0;34m[0m[0;34m[0m[0;34m[0m[0m
[1;32m 549[0m [0;34m[0m[0m
[0;32m--> 550[0;31m [0mtrial[0m [0;34m=[0m [0mself[0m[0;34m.[0m[0m_run_trial[0m[0;34m([0m[0mfunc[0m[0;34m,[0m [0mcatch[0m[0;34m,[0m [0mgc_after_trial[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 551[0m [0;32mif[0m [0mcallbacks[0m [0;32mis[0m [0;32mnot[0m [0;32mNone[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 552[0m [0mfrozen_trial[0m [0;34m=[0m [0mself[0m[0;34m.[0m[0m_storage[0m[0;34m.[0m[0mget_trial[0m[0;34m([0m[0mtrial[0m[0;34m.[0m[0m_trial_id[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/study.py[0m in [0;36m_run_trial[0;34m(self, func, catch, gc_after_trial)[0m
[1;32m 567[0m [0;34m[0m[0m
[1;32m 568[0m [0;32mtry[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 569[0;31m [0mresult[0m [0;34m=[0m [0mfunc[0m[0;34m([0m[0mtrial[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 570[0m [0;32mexcept[0m [0mexceptions[0m[0;34m.[0m[0mTrialPruned[0m [0;32mas[0m [0me[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 571[0m message = 'Setting status of trial#{} as {}. {}'.format(trial_number,
[0;32m<ipython-input-10-ffc699c21a4b>[0m in [0;36mobjective[0;34m(trial)[0m
[1;32m 76[0m [0;31m# see https://github.com/optuna/optuna/blob/cf6f02d/examples/pytorch_lightning_simple.py[0m[0;34m[0m[0;34m[0m[0;34m[0m[0m
[1;32m 77[0m [0;34m[0m[0m
[0;32m---> 78[0;31m [0mtrial[0m [0;34m=[0m [0madd_sugg[0m[0;34m([0m[0mtrial[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 79[0m [0;34m[0m[0m
[1;32m 80[0m [0mprint[0m[0;34m([0m[0;34m'trial'[0m[0;34m,[0m [0mtrial[0m[0;34m.[0m[0mnumber[0m[0;34m,[0m [0;34m'params'[0m[0;34m,[0m [0mtrial[0m[0;34m.[0m[0mparams[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m<ipython-input-10-ffc699c21a4b>[0m in [0;36madd_sugg[0;34m(trial)[0m
[1;32m 55[0m [0mtrial[0m[0;34m.[0m[0msuggest_categorical[0m[0;34m([0m[0;34m"batchnorm"[0m[0;34m,[0m [0;34m[[0m[0;32mFalse[0m[0;34m,[0m [0;32mTrue[0m[0;34m][0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 56[0m [0mtrial[0m[0;34m.[0m[0msuggest_categorical[0m[0;34m([0m[0;34m"use_self_attn"[0m[0;34m,[0m [0;34m[[0m[0;32mFalse[0m[0;34m,[0m [0;32mTrue[0m[0;34m][0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m---> 57[0;31m [0mtrial[0m[0;34m.[0m[0msuggest_categorical[0m[0;34m([0m[0;34m"use_lvar"[0m[0;34m,[0m [0;34m[[0m[0;32mFalse[0m[0;34m,[0m [0;32mTrue[0m[0;34m][0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 58[0m [0mtrial[0m[0;34m.[0m[0msuggest_categorical[0m[0;34m([0m[0;34m"use_deterministic_path"[0m[0;34m,[0m [0;34m[[0m[0;32mFalse[0m[0;34m,[0m [0;32mTrue[0m[0;34m][0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 59[0m [0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/trial.py[0m in [0;36msuggest_categorical[0;34m(self, name, choices)[0m
[1;32m 343[0m [0;34m[0m[0m
[1;32m 344[0m [0mchoices[0m [0;34m=[0m [0mtuple[0m[0;34m([0m[0mchoices[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 345[0;31m [0;32mreturn[0m [0mself[0m[0;34m.[0m[0m_suggest[0m[0;34m([0m[0mname[0m[0;34m,[0m [0mdistributions[0m[0;34m.[0m[0mCategoricalDistribution[0m[0;34m([0m[0mchoices[0m[0;34m=[0m[0mchoices[0m[0;34m)[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 346[0m [0;34m[0m[0m
[1;32m 347[0m [0;32mdef[0m [0mreport[0m[0;34m([0m[0mself[0m[0;34m,[0m [0mvalue[0m[0;34m,[0m [0mstep[0m[0;34m=[0m[0;32mNone[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/trial.py[0m in [0;36m_suggest[0;34m(self, name, distribution)[0m
[1;32m 486[0m self.study, trial, name, distribution)
[1;32m 487[0m [0;34m[0m[0m
[0;32m--> 488[0;31m [0;32mreturn[0m [0mself[0m[0;34m.[0m[0m_set_new_param_or_get_existing[0m[0;34m([0m[0mname[0m[0;34m,[0m [0mparam_value[0m[0;34m,[0m [0mdistribution[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 489[0m [0;34m[0m[0m
[1;32m 490[0m [0;32mdef[0m [0m_set_new_param_or_get_existing[0m[0;34m([0m[0mself[0m[0;34m,[0m [0mname[0m[0;34m,[0m [0mparam_value[0m[0;34m,[0m [0mdistribution[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/trial.py[0m in [0;36m_set_new_param_or_get_existing[0;34m(self, name, param_value, distribution)[0m
[1;32m 493[0m [0mparam_value_in_internal_repr[0m [0;34m=[0m [0mdistribution[0m[0;34m.[0m[0mto_internal_repr[0m[0;34m([0m[0mparam_value[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 494[0m set_success = self.storage.set_trial_param(self._trial_id, name,
[0;32m--> 495[0;31m param_value_in_internal_repr, distribution)
[0m[1;32m 496[0m [0;32mif[0m [0;32mnot[0m [0mset_success[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 497[0m [0mparam_value_in_internal_repr[0m [0;34m=[0m [0mself[0m[0;34m.[0m[0mstorage[0m[0;34m.[0m[0mget_trial_param[0m[0;34m([0m[0mself[0m[0;34m.[0m[0m_trial_id[0m[0;34m,[0m [0mname[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/storages/rdb/storage.py[0m in [0;36mset_trial_param[0;34m(self, trial_id, param_name, param_value_internal, distribution)[0m
[1;32m 500[0m [0;32mreturn[0m [0;32mFalse[0m[0;34m[0m[0;34m[0m[0m
[1;32m 501[0m [0;34m[0m[0m
[0;32m--> 502[0;31m [0mcommit_success[0m [0;34m=[0m [0mself[0m[0;34m.[0m[0m_commit_with_integrity_check[0m[0;34m([0m[0msession[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 503[0m [0;34m[0m[0m
[1;32m 504[0m [0;32mreturn[0m [0mcommit_success[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/optuna/storages/rdb/storage.py[0m in [0;36m_commit_with_integrity_check[0;34m(session)[0m
[1;32m 860[0m [0;34m[0m[0m
[1;32m 861[0m [0;32mtry[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 862[0;31m [0msession[0m[0;34m.[0m[0mcommit[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 863[0m [0;32mexcept[0m [0mIntegrityError[0m [0;32mas[0m [0me[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 864[0m [0mlogger[0m [0;34m=[0m [0moptuna[0m[0;34m.[0m[0mlogging[0m[0;34m.[0m[0mget_logger[0m[0;34m([0m[0m__name__[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/orm/session.py[0m in [0;36mcommit[0;34m(self)[0m
[1;32m 1034[0m [0;32mraise[0m [0msa_exc[0m[0;34m.[0m[0mInvalidRequestError[0m[0;34m([0m[0;34m"No transaction is begun."[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 1035[0m [0;34m[0m[0m
[0;32m-> 1036[0;31m [0mself[0m[0;34m.[0m[0mtransaction[0m[0;34m.[0m[0mcommit[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 1037[0m [0;34m[0m[0m
[1;32m 1038[0m [0;32mdef[0m [0mprepare[0m[0;34m([0m[0mself[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/orm/session.py[0m in [0;36mcommit[0;34m(self)[0m
[1;32m 505[0m [0;32mif[0m [0mself[0m[0;34m.[0m[0m_parent[0m [0;32mis[0m [0;32mNone[0m [0;32mor[0m [0mself[0m[0;34m.[0m[0mnested[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 506[0m [0;32mfor[0m [0mt[0m [0;32min[0m [0mset[0m[0;34m([0m[0mself[0m[0;34m.[0m[0m_connections[0m[0;34m.[0m[0mvalues[0m[0;34m([0m[0;34m)[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 507[0;31m [0mt[0m[0;34m[[0m[0;36m1[0m[0;34m][0m[0;34m.[0m[0mcommit[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 508[0m [0;34m[0m[0m
[1;32m 509[0m [0mself[0m[0;34m.[0m[0m_state[0m [0;34m=[0m [0mCOMMITTED[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/engine/base.py[0m in [0;36mcommit[0;34m(self)[0m
[1;32m 1725[0m [0;32mif[0m [0;32mnot[0m [0mself[0m[0;34m.[0m[0m_parent[0m[0;34m.[0m[0mis_active[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 1726[0m [0;32mraise[0m [0mexc[0m[0;34m.[0m[0mInvalidRequestError[0m[0;34m([0m[0;34m"This transaction is inactive"[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m-> 1727[0;31m [0mself[0m[0;34m.[0m[0m_do_commit[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 1728[0m [0mself[0m[0;34m.[0m[0mis_active[0m [0;34m=[0m [0;32mFalse[0m[0;34m[0m[0;34m[0m[0m
[1;32m 1729[0m [0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/engine/base.py[0m in [0;36m_do_commit[0;34m(self)[0m
[1;32m 1756[0m [0;32mdef[0m [0m_do_commit[0m[0;34m([0m[0mself[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 1757[0m [0;32mif[0m [0mself[0m[0;34m.[0m[0mis_active[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m-> 1758[0;31m [0mself[0m[0;34m.[0m[0mconnection[0m[0;34m.[0m[0m_commit_impl[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 1759[0m [0;34m[0m[0m
[1;32m 1760[0m [0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/engine/base.py[0m in [0;36m_commit_impl[0;34m(self, autocommit)[0m
[1;32m 755[0m [0mself[0m[0;34m.[0m[0mengine[0m[0;34m.[0m[0mdialect[0m[0;34m.[0m[0mdo_commit[0m[0;34m([0m[0mself[0m[0;34m.[0m[0mconnection[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 756[0m [0;32mexcept[0m [0mBaseException[0m [0;32mas[0m [0me[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 757[0;31m [0mself[0m[0;34m.[0m[0m_handle_dbapi_exception[0m[0;34m([0m[0me[0m[0;34m,[0m [0;32mNone[0m[0;34m,[0m [0;32mNone[0m[0;34m,[0m [0;32mNone[0m[0;34m,[0m [0;32mNone[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 758[0m [0;32mfinally[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 759[0m if (
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/engine/base.py[0m in [0;36m_handle_dbapi_exception[0;34m(self, e, statement, parameters, cursor, context)[0m
[1;32m 1476[0m [0mutil[0m[0;34m.[0m[0mraise_from_cause[0m[0;34m([0m[0msqlalchemy_exception[0m[0;34m,[0m [0mexc_info[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 1477[0m [0;32melse[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m-> 1478[0;31m [0mutil[0m[0;34m.[0m[0mreraise[0m[0;34m([0m[0;34m*[0m[0mexc_info[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 1479[0m [0;34m[0m[0m
[1;32m 1480[0m [0;32mfinally[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/util/compat.py[0m in [0;36mreraise[0;34m(tp, value, tb, cause)[0m
[1;32m 151[0m [0;32mif[0m [0mvalue[0m[0;34m.[0m[0m__traceback__[0m [0;32mis[0m [0;32mnot[0m [0mtb[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 152[0m [0;32mraise[0m [0mvalue[0m[0;34m.[0m[0mwith_traceback[0m[0;34m([0m[0mtb[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 153[0;31m [0;32mraise[0m [0mvalue[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 154[0m [0;34m[0m[0m
[1;32m 155[0m [0;32mdef[0m [0mu[0m[0;34m([0m[0ms[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/engine/base.py[0m in [0;36m_commit_impl[0;34m(self, autocommit)[0m
[1;32m 753[0m [0mself[0m[0;34m.[0m[0mengine[0m[0;34m.[0m[0mlogger[0m[0;34m.[0m[0minfo[0m[0;34m([0m[0;34m"COMMIT"[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[1;32m 754[0m [0;32mtry[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 755[0;31m [0mself[0m[0;34m.[0m[0mengine[0m[0;34m.[0m[0mdialect[0m[0;34m.[0m[0mdo_commit[0m[0;34m([0m[0mself[0m[0;34m.[0m[0mconnection[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 756[0m [0;32mexcept[0m [0mBaseException[0m [0;32mas[0m [0me[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[1;32m 757[0m [0mself[0m[0;34m.[0m[0m_handle_dbapi_exception[0m[0;34m([0m[0me[0m[0;34m,[0m [0;32mNone[0m[0;34m,[0m [0;32mNone[0m[0;34m,[0m [0;32mNone[0m[0;34m,[0m [0;32mNone[0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0;32m~/.pyenv/versions/jup3.7.3/lib/python3.7/site-packages/sqlalchemy/engine/default.py[0m in [0;36mdo_commit[0;34m(self, dbapi_connection)[0m
[1;32m 539[0m [0;34m[0m[0m
[1;32m 540[0m [0;32mdef[0m [0mdo_commit[0m[0;34m([0m[0mself[0m[0;34m,[0m [0mdbapi_connection[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;32m--> 541[0;31m [0mdbapi_connection[0m[0;34m.[0m[0mcommit[0m[0;34m([0m[0;34m)[0m[0;34m[0m[0;34m[0m[0m
[0m[1;32m 542[0m [0;34m[0m[0m
[1;32m 543[0m [0;32mdef[0m [0mdo_close[0m[0;34m([0m[0mself[0m[0;34m,[0m [0mdbapi_connection[0m[0;34m)[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m
[0;31mKeyboardInterrupt[0m: In [ ]:
In [ ]:
print('Number of finished trials: {}'.format(len(study.trials)))
print('Best trial:')
trial = study.best_trial
print(' Value: {}'.format(trial.value))
print(' Params: ')
for key, value in trial.params.items():
print(' {}: {}'.format(key, value))
# shutil.rmtree(MODEL_DIR)In [ ]:
In [ ]:
df = study.trials_dataframe(attrs=('number', 'value', 'params', 'state'))
df.sort_values('value')In [ ]:
df.sort_values('value').head(17).TIn [ ]: