J'ai déjà utilisé GridSearchCV de Scikit-learn pour optimiser les hyperparamètres de mes modèles, mais je me demande simplement s'il existe un outil similaire pour optimiser les hyperparamètres pour Tensorflow (par exemple nombre d'époques, taux d'apprentissage, taille de la fenêtre coulissante, etc.)
Sinon, comment puis-je implémenter un extrait qui exécute efficacement toutes les différentes combinaisons?
Une autre option viable (et documentée) pour la recherche de grille avec Tensorflow est Ray Tune . Il s'agit d'un cadre évolutif pour le réglage hyperparamétrique, spécifiquement pour l'apprentissage en profondeur/l'apprentissage par renforcement.
Vous pouvez essayer n tutoriel rapide ici .
Il prend également en charge la journalisation Tensorboard et les algorithmes de recherche efficaces (c'est-à-dire l'intégration HyperOpt
et HyperBand ) dans environ 10 lignes de Python.
import ray
from ray import tune
def train_tf_model(config, tune_reporter): # 1 new arg for reporting results
# ... train here ....
# ... train here ....
# ... train here ....
pass
ray.init()
tune.run(train_tf_model,
stop={ "mean_accuracy": 100 },
config={
"alpha": tune.grid_search([0.2, 0.4, 0.6]),
"beta": tune.grid_search([1, 2]),
})
(Avertissement: je contribue activement à ce projet!)
Même s'il ne semble pas être explicitement documenté (dans la version 1.2), le package tf.contrib.learn
(inclus dans TensorFlow) définit les classificateurs qui sont censés être compatibles avec scikit-learn ... Cependant, en regardant la source , il semble que vous devez définir explicitement la variable d'environnement TENSORFLOW_SKLEARN
(par exemple à "1"
) pour réellement obtenir cette compatibilité. Si cela fonctionne, vous pouvez déjà utiliser GridSearchCV
( voir ce cas de test ).
Cela dit, il existe quelques alternatives. Je ne connais rien de spécifique à TensorFlow, mais hyperopt , Scikit-Optimize ou SMAC devraient tous être des options valides. MOE et Spearmint semblent être de bons choix mais ne semblent pas trop entretenus.
Alternativement, vous pouvez rechercher un service comme SigOpt (une société de l'auteur original de MOE).
Modifier
À propos de l'exécution de toutes les combinaisons de paramètres possibles, la logique de base, si vous voulez l'implémenter vous-même, n'est pas vraiment compliquée. Vous pouvez simplement définir des listes avec les valeurs possibles pour chaque paramètre, puis parcourir toutes les combinaisons avec itertools.product
. Quelque chose comme:
from itertools import product
param1_values = [...]
param2_values = [...]
param3_values = [...]
for param1, param2, param3 in product(param1_values, param2_values param3_values):
run_experiment(param1, param2, param3)
Notez cependant que la recherche dans la grille peut être extrêmement coûteuse à exécuter dans de nombreux cas, et même faire juste une recherche aléatoire dans l'espace des paramètres sera probablement plus efficace (plus à ce sujet dans cette publication ).