Je suis à la recherche d'un paquetage hyperparameter pour le code écrit directement dans Tensorflow (pas Keras ou Tflearn). Pourriez-vous faire une suggestion?
Généralement, vous n'avez pas besoin de coupler votre logique d'optimisation d'hyperparamètre avec le modèle optimisé (à moins que votre logique d'optimisation d'hyperparemètre ne soit spécifique au type de modèle que vous êtes en train de former, auquel cas vous auriez besoin de nous en dire un peu plus). Il existe plusieurs outils et packages disponibles pour la tâche. _ { Here est un bon article sur le sujet et here est un article de blog plus pratique, avec des exemples.
Parmi ceux-ci, je n'ai utilisé que vraiment (c'est-à-dire avec un problème réel) hyperopt avec TensorFlow, et cela n'a pas demandé trop d'effort. L’API est un peu bizarre à certains moments et la documentation n’est pas très complète, mais elle fonctionne et semble être en cours de développement. D'autres algorithmes d'optimisation et adaptations (par exemple, spécifiquement pour les réseaux de neurones) sont à venir. Cependant, comme suggéré dans l'article de blog précédemment lié, Scikit-Optimize est probablement aussi bon, et SigOpt semble assez facile à utiliser s'il vous convient.
J'aimerais ajouter une bibliothèque supplémentaire à la liste de @ jdehesa, que j'ai appliquée dans mes recherches, en particulier avec tensorflow. C'est hyper-engine , Apache 2.0 sous licence.
Il implémente également l'optimisation bayésienne en processus gaussien et d'autres techniques, telles que prédiction de la courbe d'apprentissage , qui permettent de gagner beaucoup de temps.
Vous pouvez essayer Ray Tune, une simple bibliothèque pour mettre à l’échelle la recherche hyperparamètre. Je l’utilise principalement pour la formation sur le modèle Tensorflow, mais il n’est pas lié au cadre - fonctionne parfaitement avec PyTorch, Keras, etc. Voici la page de la documentation - ray.readthedocs.io/en/latest/tune.html
Vous pouvez l'utiliser pour exécuter des versions distribuées d'algorithmes de pointe, tels que HyperBand ou Bayesian Optimization dans environ 10 lignes de code.
Comme exemple pour exécuter 4 évaluations parallèles à la fois:
import ray
import ray.tune as tune
from ray.tune.hyperband import HyperBandScheduler
def train_model(config, reporter): # add the reporter parameter
model = build_tf_model(config["alpha"], config["beta"])
loss = some_loss_function(model)
optimizer = tf.AdamOptimizer(loss)
for i in range(20):
optimizer.step()
stats = get_statistics()
reporter(timesteps_total=i,
mean_accuracy=stats["accuracy"])
tune.register_trainable("my_func", train_model)
ray.init(num_cpus=4)
tune.run_experiments({
"my_experiment": {
"run": "my_func",
"stop": { "mean_accuracy": 100 },
"config": {
"alpha": tune.grid_search([0.2, 0.4, 0.6]),
"beta": tune.grid_search([1, 2]) } } },
scheduler=HyperBandScheduler(reward_attr="mean_accuracy"))
Vous n'avez également pas besoin de modifier votre code si vous souhaitez exécuter ce script sur un cluster.
Avertissement: je travaille sur ce projet - laissez-moi savoir si vous avez des commentaires!
Je ne sais pas si ce sont également les paramètres que vous souhaitez, mais vous avez mentionné les hyperparamètres TensorFlow, alors je suppose que je peux en suggérer certains.
Essayez de cloner ce référentiel pour avoir les scripts nécessaires;
git clone https://github.com/googlecodelabs/tensorflow-for-poets-2
et dans le dossier principal, appelez l'invite de commande et exécutez cette ligne;
python -m scripts.retrain -h
pour obtenir la liste des arguments optionnels.
Source: https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#6
J'ai trouvé sci-kit optimiser très simple à utiliser pour l'optimisation bayésienne des hyperamètres, et cela fonctionne avec n'importe quel API tensorflow (estimateur, estimateur personnalisé, noyau, keras, etc.)