#Optunaでハイパーパラメーターを設定する方法をメモします。
ハイパーパラメータを最適化するフレームワークのOptunaの使い方。これは Preferred Networks が作ったものです。
公式チュートリアル
https://optuna.readthedocs.io/en/stable/tutorial/first.html
APIリファレンス
https://optuna.readthedocs.io/en/stable/reference/index.html
目的関数と探索空間を定義します。
次にstudy
インスタンスを建て、optimize
メソッドで最適化を行います。
import optuna
#目的関数の定義
def objective(trial):
#ここに探索空間を記載
return ***目的関数**最大化でも最小化でも良い***
探査空間は、
trial.suggest_
で設定します。
整数、カテゴリーなどで、以下のように渡します。
suggest_categorical(name, choices)
では、例では、'kernel'というパラメーターに3つを選んで入ります。
suggest_int(name, low, high, step=1, log=False)
では、整数パラメータの値を与えます。
suggest_uniform(name, low, high)
では、low
、high
の間で、線形で連続値を与えます
suggest_loguniform(name, low, high)
では、対数区間での連続値を与えます。
suggest_float(name:str、low:float、high:float、*、step:Optional [float] = None)
では、浮動小数点パラメーターの値が入ります。
suggest_discrete_uniform(name, low, high, q)
で,値はlow
、high
の範囲からサンプリングされ、離散化の数値はステップqで与えられます。
def objective(trial):
#探索空間の与え方
# Categorical parameter
kernel = trial.suggest_categorical('kernel', ['linear', 'poly', 'rbf'])
# Int parameter
num_layers = trial.suggest_int('num_layers', 1, 3)
# Uniform parameter
dropout_rate = trial.suggest_uniform('dropout_rate', 0.0, 1.0)
# Loguniform parameter
learning_rate = trial.suggest_loguniform('learning_rate', 1e-5, 1e-2)
# Discrete-uniform parameter
drop_path_rate = trial.suggest_discrete_uniform('drop_path_rate', 0.0, 1.0, 0.1)
# ハイパーパラメータの自動最適化
study = optuna.create_study()
#n_trials で探索する繰り返し回数を設定します。
study.optimize(objective, n_trials = 100)