Optuna ist ein Autooptimierungs-Framework für Hyperparameter. Es scheint hauptsächlich für die Optimierung von Hyperparametern beim maschinellen Lernen verwendet zu werden. Offizielle Homepage
Lassen Sie uns zuerst die Bibliothek installieren. Sie können es mit pip install optuna </ font> installieren.
Diesmal
x^2+y^2+z^2
Optimieren wir das Minimierungsproblem.
Definieren Sie zunächst die Zielfunktion.
#Zielfunktion einstellen(Diesmal x^2+y^2+z^2)
def objective(trial):
#Stellen Sie die zu optimierenden Parameter ein
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
#Gibt den Auswertungswert zurück(Es ist standardmäßig so konzipiert, dass es minimiert wird)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
Erstellen Sie zunächst ein Studienobjekt und führen Sie dann eine Optimierung durch. Sie können die Anzahl der Suchvorgänge mit n_trials festlegen. Dies ist ein Argument von optimze ().
#Objekterstellung studieren
study = optuna.create_study()
#Optimierungsausführung
study.optimize(objective, n_trials=500)
Bei der Ausführung wird die folgende Anzeige angezeigt. (Auszug)
[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}.
Wenn Sie die optimierten Parameter anzeigen möchten, fügen Sie Folgendes hinzu:
print(study.best_params)
Wenn Sie den optimierten Zielfunktionswert überprüfen möchten, fügen Sie Folgendes hinzu.
print(study.best_value)
Wenn Sie jeden Versuch sehen möchten, rufen Sie die Informationen aus study.trials ab. Sie können die Anzahl der Versuche, Parameter und objektiven Funktionswerte mit dem folgenden Code anzeigen.
for i in study.trials:
print(i.number, i.params, i.value)
Ich werde den diesmal verwendeten Code einfügen.
# -*- coding: utf-8 -*-
import optuna
import matplotlib.pyplot as plt
#Zielfunktion einstellen(Diesmal x^2+y^2+z^2)
def objective(trial):
#Stellen Sie die zu optimierenden Parameter ein
param = {
'x': trial.suggest_int('x', -100, 100),
'y': trial.suggest_int('y', -100, 100),
'z': trial.suggest_int('z', -100, 100)
}
#Gibt den Auswertungswert zurück(Es ist standardmäßig so konzipiert, dass es minimiert wird)
return param['x'] ** 2 + param['y'] ** 2 + param['z'] ** 2
if __name__ == '__main__':
#Objekterstellung studieren
study = optuna.create_study()
#Optimierungsausführung
study.optimize(objective, n_trials=500)
epoches = [] #Zum Speichern der Anzahl der Versuche
values = [] # best_Zum Speichern von Wert
best = 100000 #Speichern Sie den Maximalwert entsprechend
#Mach das beste Update
for i in study.trials:
if best > i.value:
best = i.value
epoches.append(i.number+1)
values.append(best)
#Grafikeinstellungen usw.
plt.plot(epoches, values, color="red")
plt.title("optuna")
plt.xlabel("trial")
plt.ylabel("value")
plt.show()
Die Figur des Ergebnisses dieses Experiments ist wie folgt. Da der Wert von best_value 3.0 war, erreichte es nicht die wirklich optimale Lösung, aber es wurde bestätigt, dass es in einem frühen Stadium konvergierte.