Copyright (C) 2021 Automl -Gruppen Freiburg und Hannover
Während sich frühe Automl -Frameworks auf die Optimierung herkömmlicher ML -Pipelines und deren Hyperparameter konzentrierten, besteht ein weiterer Trend in Automl darin, sich auf die Suche nach neuronalen Architekturen zu konzentrieren. Um das Beste dieser beiden Welten zusammenzubringen, haben wir automatische Pytorch entwickelt, die gemeinsam und robust die Netzwerkarchitektur und die Trainingshyperparameter optimiert, um vollständig automatisiertes Deep Learning (Autodl) zu ermöglichen.
Auto-Pytorch wurde hauptsächlich entwickelt, um tabellarische Daten (Klassifizierung, Regression) und Zeitreihendaten (Prognose) zu unterstützen. Die neuesten Merkmale in automatischem Pytorch für tabellarische Daten sind in der Arbeit "Auto-Pytorch Tabelle: Multi-Fidelity Metalarning für effiziente und robuste Autodl" beschrieben (siehe unten für Bibtex Ref). Details zu automatisch-pytorch für multi-horizontale Zeitreihenprognoseaufgaben finden Sie in der Arbeit "Effiziente automatisierter Deep Learning for Time Series Prognosen" (siehe unten für Bibtex Ref).
Suchen Sie hier auch die Dokumentation.
Ab V0.1.0 wurde AutopyTorch aktualisiert, um die Benutzerfreundlichkeit, Robustheit und Effizienz weiter zu verbessern, indem SMAC als zugrunde liegender Optimierungspaket verwendet und die Codestruktur geändert wird. Daher wird der Umzug von V0.0.2 auf V0.1.0 die Kompatibilität durchbrechen. Falls Sie die alte API verwenden möchten, finden Sie sie bei master_old .
Die grobe Beschreibung des Workflows von Auto-Pytorch wird in der folgenden Abbildung gezeichnet.
In der Abbildung werden die Daten vom Benutzer bereitgestellt und Portfolio sind eine Reihe von Konfigurationen neuronaler Netzwerke, die gut für verschiedene Datensätze funktionieren. Die aktuelle Version unterstützt nur das gierige Portfolio , wie im Papier automatisch-Pytorch Tabellular: Multi-Fidelity Metalarning für effizientes und robustes Autodl mit diesem Portfolio verwendet, um die Optimierung von SMAC zu erwärmen. Mit anderen Worten, wir bewerten das Portfolio für bereitgestellte Daten als erste Konfigurationen. Dann startet die API die folgenden Verfahren:
sklearn.dummy , das die schlechteste Leistung darstellt.*1: Baselines sind ein vordefinierter Pool von Algorithmen für maschinelles Lernen, z.
*2: Eine Pipeline -Hyperparameter -Konfiguration gibt die Auswahl der Komponenten, z.
pip install autoPyTorch
Auto-Pytorch für die Zeitreihenprognose erfordert zusätzliche Abhängigkeiten
pip install autoPyTorch[forecasting]
Wir empfehlen, Anaconda für die Entwicklung wie folgt zu verwenden:
# Following commands assume the user is in a cloned directory of Auto-Pytorch
# We also need to initialize the automl_common repository as follows
# You can find more information about this here:
# https://github.com/automl/automl_common/
git submodule update --init --recursive
# Create the environment
conda create -n auto-pytorch python=3.8
conda activate auto-pytorch
conda install swig
python setup.py install
In ähnlicher Weise installieren Sie alle Abhängigkeiten für automatische Pytorch-TimeriesForecasting:
git submodule update --init --recursive
conda create -n auto-pytorch python=3.8
conda activate auto-pytorch
conda install swig
pip install -e[forecasting]
Kurzgesagt:
from autoPyTorch . api . tabular_classification import TabularClassificationTask
# data and metric imports
import sklearn . model_selection
import sklearn . datasets
import sklearn . metrics
X , y = sklearn . datasets . load_digits ( return_X_y = True )
X_train , X_test , y_train , y_test =
sklearn . model_selection . train_test_split ( X , y , random_state = 1 )
# initialise Auto-PyTorch api
api = TabularClassificationTask ()
# Search for an ensemble of machine learning algorithms
api . search (
X_train = X_train ,
y_train = y_train ,
X_test = X_test ,
y_test = y_test ,
optimize_metric = 'accuracy' ,
total_walltime_limit = 300 ,
func_eval_time_limit_secs = 50
)
# Calculate test accuracy
y_pred = api . predict ( X_test )
score = api . score ( y_pred , y_test )
print ( "Accuracy score" , score )Für Zeitreihenvorhersageaufgaben
from autoPyTorch . api . time_series_forecasting import TimeSeriesForecastingTask
# data and metric imports
from sktime . datasets import load_longley
targets , features = load_longley ()
# define the forecasting horizon
forecasting_horizon = 3
# Dataset optimized by APT-TS can be a list of np.ndarray/ pd.DataFrame where each series represents an element in the
# list, or a single pd.DataFrame that records the series
# index information: to which series the timestep belongs? This id can be stored as the DataFrame's index or a separate
# column
# Within each series, we take the last forecasting_horizon as test targets. The items before that as training targets
# Normally the value to be forecasted should follow the training sets
y_train = [ targets [: - forecasting_horizon ]]
y_test = [ targets [ - forecasting_horizon :]]
# same for features. For uni-variant models, X_train, X_test can be omitted and set as None
X_train = [ features [: - forecasting_horizon ]]
# Here x_test indicates the 'known future features': they are the features known previously, features that are unknown
# could be replaced with NAN or zeros (which will not be used by our networks). If no feature is known beforehand,
# we could also omit X_test
known_future_features = list ( features . columns )
X_test = [ features [ - forecasting_horizon :]]
start_times = [ targets . index . to_timestamp ()[ 0 ]]
freq = '1Y'
# initialise Auto-PyTorch api
api = TimeSeriesForecastingTask ()
# Search for an ensemble of machine learning algorithms
api . search (
X_train = X_train ,
y_train = y_train ,
X_test = X_test ,
optimize_metric = 'mean_MAPE_forecasting' ,
n_prediction_steps = forecasting_horizon ,
memory_limit = 16 * 1024 , # Currently, forecasting models use much more memories
freq = freq ,
start_times = start_times ,
func_eval_time_limit_secs = 50 ,
total_walltime_limit = 60 ,
min_num_test_instances = 1000 , # proxy validation sets. This only works for the tasks with more than 1000 series
known_future_features = known_future_features ,
)
# our dataset could directly generate sequences for new datasets
test_sets = api . dataset . generate_test_seqs ()
# Calculate test accuracy
y_pred = api . predict ( test_sets )
score = api . score ( y_pred , y_test )
print ( "Forecasting score" , score ) Weitere Beispiele, darunter das Anpassen des Suchraums, das Parellieren des Codes usw., überprüfen Sie den examples -Ordner
$ cd examples/ Der Code für das Papier ist unter examples/ensemble in der TPAMI.2021.3067763 Branch verfügbar.
Wenn Sie zur automatischen Pytorch beitragen möchten, klonen Sie das Repository und überprüfen Sie unsere aktuelle Entwicklungszweig
$ git checkout developmentDieses Programm ist kostenlose Software: Sie können es neu verteilen und/oder unter den Bestimmungen der Apache -Lizenz 2.0 ändern (siehe die Lizenzdatei).
Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, jedoch ohne Garantie; Ohne die implizite Garantie für Handelsfähigkeit oder Eignung für einen bestimmten Zweck.
Sie sollten zusammen mit diesem Programm eine Kopie der Apache -Lizenz 2.0 erhalten haben (siehe Lizenzdatei).
Weitere Informationen finden Sie im Zweig TPAMI.2021.3067763 , um das Papier automatisch-Pytorch-Tabelle zu reproduzieren: Multi-Fidelity Metalarning für effizientes und robustes Autodl .
@article { zimmer-tpami21a ,
author = { Lucas Zimmer and Marius Lindauer and Frank Hutter } ,
title = { Auto-PyTorch Tabular: Multi-Fidelity MetaLearning for Efficient and Robust AutoDL } ,
journal = { IEEE Transactions on Pattern Analysis and Machine Intelligence } ,
year = { 2021 } ,
note = { also available under https://arxiv.org/abs/2006.13799 } ,
pages = { 3079 - 3090 }
} @incollection { mendoza-automlbook18a ,
author = { Hector Mendoza and Aaron Klein and Matthias Feurer and Jost Tobias Springenberg and Matthias Urban and Michael Burkart and Max Dippel and Marius Lindauer and Frank Hutter } ,
title = { Towards Automatically-Tuned Deep Neural Networks } ,
year = { 2018 } ,
month = dec,
editor = { Hutter, Frank and Kotthoff, Lars and Vanschoren, Joaquin } ,
booktitle = { AutoML: Methods, Sytems, Challenges } ,
publisher = { Springer } ,
chapter = { 7 } ,
pages = { 141--156 }
} @article { deng-ecml22 ,
author = { Difan Deng and Florian Karl and Frank Hutter and Bernd Bischl and Marius Lindauer } ,
title = { Efficient Automated Deep Learning for Time Series Forecasting } ,
year = { 2022 } ,
booktitle = { Machine Learning and Knowledge Discovery in Databases. Research Track
- European Conference, {ECML} {PKDD} 2022 } ,
url = { https://doi.org/10.48550/arXiv.2205.05511 } ,
}Auto-Pytorch wird von den Automl-Gruppen der Universität Freiburg und Hannover entwickelt.