2017-06-28 7 views
3

J'ai utilisé GridSearchCV de Scikit-learn avant d'optimiser les hyperparamètres de mes modèles, mais je me demandais si un outil similaire existait pour optimiser les hyperparamètres pour Tensorflow (par exemple nombre d'époques, taux d'apprentissage, glissement taille de la fenêtre, etc.)Réglage de l'hyperparamètre de Tensorflow Modèle

Et si ce n'est pas le cas, comment puis-je implémenter un extrait qui gère efficacement toutes les combinaisons?

Répondre

7

Même s'il ne semble pas explicitement documenté (dans la version 1.2), le paquet tf.contrib.learn (inclus dans TensorFlow) définit des classificateurs qui sont supposés être compatibles avec scikit-learn ... Cependant, en regardant the source, il semble que vous devez définir explicitement la variable d'environnement TENSORFLOW_SKLEARN (par exemple à "1") pour obtenir cette compatibilité. Si cela fonctionne, vous pouvez déjà utiliser GridSearchCV (see this test case).

Cela dit, il existe quelques alternatives. Je ne connais pas de spécifique à TensorFlow, mais hyperopt, Scikit-Optimize ou SMAC3 devraient tous être des options valides. MOE et Spearmint ressemblent à l'habitude d'être de bons choix, mais maintenant ne semblent pas trop entretenus.

Alternativement, vous pouvez regarder dans un service comme SigOpt (une société de l'auteur original de MOE).

Modifier

A propos de l'exécution de toutes les combinaisons possibles de paramètres, la logique de base, si vous souhaitez implémenter vous-même, n'est pas vraiment compliqué. 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 de la grille peut être prohibitif pour fonctionner 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 in this publication).