[PYTHON] Versuchen Sie die Funktionsoptimierung mit Optuna

Einführung

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

Vorbereitung

Lassen Sie uns zuerst die Bibliothek installieren. Sie können es mit pip install optuna </ font> installieren.

Experiment

Diesmal

x^2+y^2+z^2

Optimieren wir das Minimierungsproblem.

Objektive Funktionsdefinition

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

Optimierungsausführung

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)

Code

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()

Ergebnis

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. optuna2.png

Recommended Posts

Versuchen Sie die Funktionsoptimierung mit Optuna
Versuchen Sie die Funktionsoptimierung mit Hyperopt
Versuchen Sie es mit Python.
Straßeninstallation durch Optimierung
Einführung in die Optimierung
Versuchen Sie SNN mit BindsNET
[Überprüfung] Versuchen Sie, die Punktgruppe an der Optimierungsfunktion von Pytorch Part 1 auszurichten
Versuchen Sie eine Regression mit TensorFlow
Versuchen Sie, das LWMA von MetaTrader mit der FIR-Filterfunktion von scipy zu implementieren
Versuchen Sie, den Boden durch Rekursion herauszufordern
Implementieren Sie die Anmeldefunktion mit django-allauth
Versuchen Sie es mit TensorFlow
Versuchen Sie, PythonTex mit Texpad zu verwenden.
Versuchen Sie die Kantenerkennung mit OpenCV
Versuchen Sie, RBM mit Chainer zu implementieren.
Versuchen Sie Google Mock mit C.
Ungefähre Sinusfunktion mit TensorFlow
Versuchen Sie es mit matplotlib mit PyCharm
Versuchen Sie, mit einer Shell zu programmieren!
Versuchen Sie die GUI-Programmierung mit Hy
Versuchen Sie Auto Encoder mit Pytorch
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Versuchen Sie die Matrixoperation mit NumPy
Versuchen Sie, XOR mit PyTorch zu implementieren
Gruppieren von Spielen mit Kombinationsoptimierung
Versuchen Sie, CNN mit ChainerRL auszuführen
Probieren Sie verschiedene Dinge mit PhantomJS aus
Stellen Sie unzusammenhängende Fotos mit Optimierung wieder her!
[Optimierungsproblem] Optuna vs Hyperopt
Versuchen Sie Deep Learning mit FPGA
Kombinationsoptimierung mit Quantenglühen
Probieren Sie Black-Box-Optimierungstechniken aus (Bayes-Optimierung: Optuna, Genetische Programmierung: TPOT)
Globale Allzweckoptimierung mit Z3
Anpassen der LightGBM-Parameter mit Optuna
Versuchen Sie, Python mit Try Jupyter auszuführen
Versuchen Sie, Parfüm mit Go zu implementieren
Probieren Sie Selenium Grid mit Docker aus
Versuchen Sie die Gesichtserkennung mit Python
Probieren Sie OpenCV mit Google Colaboratory aus
Zura mit Softmax-Funktion implementiert
Versuchen Sie es mit Kaggle leicht maschinell
Passen Sie die Hyperparameter mit der Bayes'schen Optimierung an
Versuchen Sie die Verschlüsselung / Entschlüsselung mit dem OpenSSL-Schlüssel mit Python3-Pow-Funktion
Versuchen Sie TensorFlow MNIST mit RNN
Versuchen Sie, Jupyter Hub mit Docker zu erstellen
Versuchen Sie es mit Folium mit Anakonda
Versuchen Sie, das Problem der Funktionsminimierung mithilfe der Partikelgruppenoptimierung zu lösen
Probieren Sie Deep Learning mit FPGA-Select-Gurken aus
Versuchen Sie es mit Python + Beautiful Soup
Lernen stärken 13 Probieren Sie Mountain_car mit ChainerRL aus.
Lösen Sie ein 4-Farben-Problem mit Kombinationsoptimierung
Funktionsparameter nur für Stern '*'
Maximieren Sie den Restaurantverkauf durch kombinierte Optimierung
Mehrschichtiges Perzeptron mit Kette: Funktionsanpassung
Versuchen Sie, Facebook mit Python zu betreiben
Sehen Sie sich Wale mit Kombinationsoptimierung an
Bereiten Sie die Straße mit Kombinationsoptimierung
Versuchen Sie die Singularwertzerlegung mit Python
Versuchen Sie es mit TensorFlow Part 2