Dies ist eine Erinnerung an das, was ich beim Konvertieren von Pythons Argparse-Einstellungen in Hydra nachgeschlagen habe. Schließlich schreibe ich eine praktische Funktion, die nur für Hydra gilt.
Beim Schreiben eines Expertenskripts für maschinelles Lernen in Python habe ich argparse als Einstellungsmethode für Hyperparameter verwendet. Als das Experiment jedoch komplizierter wurde, bestand der Wunsch, eine beträchtliche Anzahl von Zeilen zu haben und die Einstellungen nur mit der Datei zu strukturieren, die die Argparse-Einstellungen beschreibt. .. .. Lesen Sie also ymyms "Empfehlung für ein hohes Para-Management - Verwalten Sie Hyperparameter mit Hydra + MLflow-" und lesen Sie "This Es war! “, Also entschied ich mich, es zu benutzen. Dann habe ich verschiedene Dinge untersucht, als ich die in Argparse geschriebenen experimentellen Einstellungen auf Hydra migriert habe, also habe ich sie zusammengefasst.
"A framework for elegantly configuring complex applications" Es scheint ein "Rahmen für die elegante Verwaltung der Einstellungen komplexer Anwendungen" zu sein. Die Entwicklung konzentriert sich auf die Facebook-Forschung.
Detaillierte Einstellungen finden Sie im obigen Artikel von ymym und Official Tutorial. Die erste Funktion ist, dass Sie, wenn Sie die Einstellungen in der yaml-Datei strukturell beschreiben und den Inhalt überschreiben möchten, diese zur Laufzeit in der Befehlszeile überschreiben können.
--hydra beschreibt die Einstellungen in der yaml-Datei und gibt sie als Dekorator für die Funktion, die sie ausführt.
argparse
# main.py
def main():
parser = parser.ArgumentParser(...)
parser.add_argument('--hoge', type=int, default=1)
cfg = parser.parse_args()
print(cfg.hoge) # 1
hydra
# config.yaml
hoge: 1
# main.py
@hydra.main(config_path='config.yaml')
def main(cfg):
print(cfg.hoge) # 1
=
anargparse
# shell
python main.py --hoge 2
hydra
# shell
python main.py hoge=1
nargs
argparse
# main.py
parser.add_argument('--hoge', type=int, nargs=3, default=[1, 2, 3])
# shell
python main.py --hoge 4 5 6
hydra
# config.yaml
hoge:
- 1
- 2
- 3
# shell
python main.py hoge=[1,2,3]
required=True
argparse
# main.py
parser.add_argument('--hoge', type=int, required=True)
hydra
# config.yaml
hoge: ???
choices
argparse
# main.py
parser.add_argument('--hoge', type=int, default=1, choices=[1, 2])
print(cfg.hoge)
# shell
python main.py --hoge 2
# 2
hydra
├── config
| ├── config.yaml
│ └── choice
│ ├── a.yaml
│ └── b.yaml
└── main.py
# config.yaml
choice: a
# choice/a.yaml
hoge: 1
# choice/b.yaml
hoge: 2
# main.py
print(cfg.hoge)
# shell
python main.py choice=b
# 2
--help
argparse
# shell
python main.py --help
hydra
# shell
python main.py --cfg job
Da es sich fast um eine Einführung in das Lernprogramm handelt, binden Sie einen Link zum Ziel-Lernprogramm in den Abschnittsnamen ein. Bitte beachten Sie dies für Details.
Multi-run Versuchen Sie, gleichzeitig mehrere Einstellungen vorzunehmen, wobei die Konfiguration in den obigen Optionen festgelegt ist.
# shell
python main.py hoge=a,b
Wenn Sie den folgenden Befehl einmal ausführen, bevor Sie das Skript ausführen, können Sie die Tab-Vervollständigung verwenden, wenn Sie Optionen über die Befehlszeile angeben.
eval "$(python main.py -sc install=bash)"
hydra erstellt automatisch ein strukturiertes Protokollverzeichnis basierend auf Datum und Uhrzeit ohne Einstellungen und verwendet dieses zur Laufzeit als Arbeitsverzeichnis und die zur Laufzeit generierten und gespeicherten Dateien. Dateien speichern etc.
import os
@hydra.main()
def main(_cfg):
print("Working directory : {}".format(os.getcwd()))
$ python main.py
Working directory : /home/omry/dev/hydra/outputs/2019-09-25/15-16-17
$ python main.py
Working directory : /home/omry/dev/hydra/outputs/2019-09-25/15-16-19
Geben Sie das Arbeitsverzeichnis jedoch nicht ohne Erlaubnis an! Ich denke, es gibt Leute, die das sagen (ich selbst), also lasst uns das Verzeichnis für Hydra selbst angeben.
Ich habe gerade angefangen, es zu verwenden. Wenn der Artikel also Fehler enthält oder jemand, der einen besseren Weg kennt, würde ich es begrüßen, wenn Sie mich unterrichten könnten. Wenn Sie Hydra verwenden, wird der Code aktualisiert, versuchen Sie es also bitte! (Besonders für großen Code)
Wenn Sie mehr über die Verwendung erfahren möchten, wenden Sie sich bitte an Offizielles Dokument und ymyms Blog. Bitte beziehen Sie sich auf / 09 034644).
Recommended Posts