Neu: Visualisieren Sie PBA und angewandte Erweiterungen mit dem Notebook pba.ipynb
!
Jetzt mit Python 3-Unterstützung.
Population Based Augmentation (PBA) ist ein Algorithmus, der schnell und effizient Datenerweiterungsfunktionen für das Training neuronaler Netzwerke lernt. PBA gleicht modernste CIFAR-Ergebnisse mit tausendmal weniger Rechenaufwand ab und ermöglicht es Forschern und Praktikern, mithilfe einer einzigen Workstation-GPU effektiv neue Erweiterungsrichtlinien zu erlernen.
Dieses Repository enthält Code für die Arbeit „Population Based Augmentation: Efficient Learning of Augmentation Schedules“ (http://arxiv.org/abs/1905.05393) in TensorFlow und Python. Es umfasst das Training von Modellen mit den gemeldeten Erweiterungsplänen und die Ermittlung neuer Pläne für Erweiterungsrichtlinien.
Unten finden Sie eine Visualisierung unserer Augmentationsstrategie.
Code unterstützt Python 2 und 3.
pip install -r requirements.txt
bash datasets/cifar10.sh
bash datasets/cifar100.sh
Datensatz | Modell | Testfehler (%) |
---|---|---|
CIFAR-10 | Wide-ResNet-28-10 | 2,58 |
Shake-Shake (26 2x32d) | 2,54 | |
Shake-Shake (26 2x96d) | 2.03 | |
Shake-Shake (26 2x112d) | 2.03 | |
PyramidNet+ShakeDrop | 1,46 | |
Reduziertes CIFAR-10 | Wide-ResNet-28-10 | 12.82 |
Shake-Shake (26 2x96d) | 10.64 | |
CIFAR-100 | Wide-ResNet-28-10 | 16.73 |
Shake-Shake (26 2x96d) | 15.31 | |
PyramidNet+ShakeDrop | 10.94 | |
SVHN | Wide-ResNet-28-10 | 1.18 |
Shake-Shake (26 2x96d) | 1.13 | |
Reduzierter SVHN | Wide-ResNet-28-10 | 7,83 |
Shake-Shake (26 2x96d) | 6.46 |
Skripte zum Reproduzieren der Ergebnisse befinden sich in scripts/table_*.sh
. Für alle Skripte ist ein Argument erforderlich, der Modellname. Die verfügbaren Optionen sind diejenigen, die für jeden Datensatz in Tabelle 2 des Papiers angegeben sind, unter den Auswahlmöglichkeiten: wrn_28_10, ss_32, ss_96, ss_112, pyramid_net
. Hyperparameter befinden sich auch in jeder Skriptdatei.
Um beispielsweise CIFAR-10-Ergebnisse auf Wide-ResNet-28-10 zu reproduzieren:
bash scripts/table_1_cifar10.sh wrn_28_10
So reproduzieren Sie reduzierte SVHN-Ergebnisse bei Shake-Shake (26 2x96d):
bash scripts/table_4_svhn.sh rsvhn_ss_96
Ein guter Ausgangspunkt ist „Reduzierter SVHN auf Wide-ResNet-28-10“, der auf einer Titan XP-GPU in weniger als 10 Minuten abgeschlossen werden kann und eine Testgenauigkeit von über 91 % erreicht.
Das Ausführen der größeren Modelle in 1800 Epochen erfordert möglicherweise mehrere Schulungstage. Beispielsweise dauert CIFAR-10 PyramidNet+ShakeDrop auf einer Tesla V100-GPU etwa 9 Tage.
Führen Sie die PBA-Suche auf Wide-ResNet-40-2 mit der Datei scripts/search.sh
aus. Ein Argument, der Datensatzname, ist erforderlich. Zur Auswahl stehen rsvhn
oder rcifar10
.
Es wird eine Teil-GPU-Größe angegeben, um mehrere Versuche auf derselben GPU zu starten. Reduziertes SVHN dauert auf einer Titan XP-GPU etwa eine Stunde und reduziertes CIFAR-10 etwa 5 Stunden.
CUDA_VISIBLE_DEVICES=0 bash scripts/search.sh rsvhn
Die bei der Suche verwendeten resultierenden Zeitpläne können aus dem Ray-Ergebnisverzeichnis abgerufen werden, und die Protokolldateien können mit der Funktion parse_log()
in pba/utils.py
in Richtlinienzeitpläne umgewandelt werden. Beispielsweise wird der auf Reduced CIFAR-10 über 200 Epochen erlernte Richtlinienplan in Wahrscheinlichkeits- und Magnituden-Hyperparameterwerte aufgeteilt (die beiden Werte für jede Erweiterungsoperation werden zusammengeführt) und unten visualisiert:
Wahrscheinlichkeitshyperparameter im Zeitverlauf | Größenhyperparameter im Zeitverlauf |
---|---|
Wenn Sie PBA in Ihrer Forschung verwenden, geben Sie bitte Folgendes an:
@inproceedings{ho2019pba,
title = {Population Based Augmentation: Efficient Learning of Augmentation Policy Schedules},
author = {Daniel Ho and
Eric Liang and
Ion Stoica and
Pieter Abbeel and
Xi Chen
},
booktitle = {ICML},
year = {2019}
}