Optuna est un cadre d'auto-optimisation d'hyperparamètres. Il semble être principalement utilisé pour le réglage des hyper paramètres de l'apprentissage automatique. Page d'accueil officielle
Tout d'abord, installons la bibliothèque. Vous pouvez l'installer avec pip install optuna </ font>.
Cette fois
x^2+y^2+z^2
Optimisons le problème de minimisation.
Tout d'abord, définissez la fonction objectif.
#Définir la fonction objectif(Cette fois x^2+y^2+z^2)
def objective(trial):
#Définissez les paramètres pour optimiser
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
#Renvoie la valeur d'évaluation(Il est conçu pour être minimisé par défaut)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
Commencez par créer un objet d'étude, puis effectuez l'optimisation. Vous pouvez définir le nombre de recherches avec n_trials, qui est un argument d'optimze ().
#création d'objet d'étude
study = optuna.create_study()
#Exécution de l'optimisation
study.optimize(objective, n_trials=500)
Une fois exécuté, l'écran suivant s'affiche. (Extrait)
[I 2019-12-01 23:01:21,564] Finished trial#381 resulted in value: 121.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,705] Finished trial#382 resulted in value: 56.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:21,866] Finished trial#383 resulted in value: 88.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,012] Finished trial#384 resulted in value: 104.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,170] Finished trial#385 resulted in value: 426.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,361] Finished trial#386 resulted in value: 5249.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,523] Finished trial#387 resulted in value: 165.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
[I 2019-12-01 23:01:22,684] Finished trial#388 resulted in value: 84.0. Current best value is 4.0 with parameters: {'x': 0, 'y': 0, 'z': 2}.
Si vous souhaitez voir les paramètres optimisés, ajoutez ce qui suit:
print(study.best_params)
Si vous souhaitez vérifier la valeur de la fonction objectif optimisée, ajoutez ce qui suit.
print(study.best_value)
De plus, si vous souhaitez voir chaque essai, vous pouvez récupérer les informations de study.trials. Vous pouvez afficher le nombre d'essais, de paramètres et de valeurs de fonction objectif avec le code suivant.
for i in study.trials:
print(i.number, i.params, i.value)
Je vais mettre le code utilisé cette fois.
# -*- coding: utf-8 -*-
import optuna
import matplotlib.pyplot as plt
#Définir la fonction objectif(Cette fois x^2+y^2+z^2)
def objective(trial):
#Définissez les paramètres pour optimiser
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
#Renvoie la valeur d'évaluation(Il est conçu pour être minimisé par défaut)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
if __name__ == '__main__':
#création d'objet d'étude
study = optuna.create_study()
#Exécution de l'optimisation
study.optimize(objective, n_trials=500)
epoches = [] #Pour stocker le nombre d'essais
values = [] # best_Pour stocker de la valeur
best = 100000 #Stockez la valeur maximale de manière appropriée
#faire la meilleure mise à jour
for i in study.trials:
if best > i.value:
best = i.value
epoches.append(i.number+1)
values.append(best)
#Paramètres du graphique, etc.
plt.plot(epoches, values, color="red")
plt.title("optuna")
plt.xlabel("trial")
plt.ylabel("value")
plt.show()
Le chiffre du résultat de cette expérience est le suivant. Comme la valeur de best_value était de 3,0, la vraie solution optimale n'a pas été atteinte, mais il a été confirmé qu'elle convergeait à un stade précoce.
Recommended Posts