Meilleure librairie python pour réseaux de neurones

130

J'utilise des réseaux de neurones pour résoudre différents problèmes d'apprentissage machine. J'utilise Python et Pybrain mais cette bibliothèque est presque abandonnée. Existe-t-il d'autres bonnes alternatives en Python?

marcodena
la source
5
Et maintenant, il y a un nouveau candidat - Scikit Neuralnetwork : Quelqu'un en at-il déjà fait l'expérience? Comment cela se compare-t-il avec Pylearn2 ou Theano?
Rafael_Espericueta
1
@ Emre: L'évolutivité est différente de la haute performance. Cela signifie généralement que vous pouvez résoudre des problèmes plus importants en ajoutant plus de ressources du même type que vous avez déjà. L'évolutivité est toujours gagnante lorsque vous avez 100 machines disponibles, même si votre logiciel est 20 fois plus lent sur chacune d'elles. . . (Bien que je préfère payer le prix pour 5 machines et bénéficier des avantages du GPU et de la balance multi-machine).
Neil Slater
2
Donc, utilisez plusieurs GPU ... personne n’utilise les processeurs pour un travail sérieux dans les réseaux de neurones. Si vous pouvez obtenir des performances de niveau Google sur un bon GPU ou sur deux, que faites-vous avec mille processeurs?
Emre
4
Je vote pour clore cette question hors sujet, car elle est devenue un exemple illustrant pourquoi les recommandations et les «meilleures» questions ne fonctionnent pas dans le format. La réponse acceptée est inexacte après 12 mois (PyLearn2 est passé de "développement actif" à "acceptation de correctifs")
Neil Slater

Réponses:

117

MISE À JOUR: le paysage a beaucoup changé depuis que j'ai répondu à cette question en juillet 2014 et de nouveaux joueurs sont entrés dans l'espace. En particulier, je recommanderais de vérifier:

Ils ont chacun leurs forces et leurs faiblesses, alors essayez-les et voyez ce qui convient le mieux à votre cas d'utilisation. Bien que j'aurais recommandé d'utiliser PyLearn2 il y a un an, la communauté n'étant plus active, je vous recommande de regarder ailleurs. Ma réponse initiale à la réponse est incluse ci-dessous mais est en grande partie hors de propos à ce stade.


PyLearn2 est généralement considéré comme la bibliothèque de choix pour les réseaux de neurones et l’apprentissage en profondeur en python. Il est conçu pour une expérimentation scientifique facile plutôt que pour une utilisation facile. La courbe d'apprentissage est donc assez raide, mais si vous prenez votre temps et suivez les tutoriels, je pense que vous serez satisfait de la fonctionnalité fournie. Tout, des perceptrons multicouches standard aux machines Boltzmann restreintes aux réseaux de convolution en passant par les autoencodeurs est fourni. Le support GPU est excellent et tout est construit sur Theano. Les performances sont donc plutôt bonnes. La source de PyLearn2 est disponible sur github .

Sachez que PyLearn2 a le problème opposé de PyBrain pour le moment. Plutôt que d’être abandonné, PyLearn2 fait actuellement l’objet d’un développement actif et est sujet à de fréquents changements.

Madison May
la source
Notez que nolearn est un wrapper qui rend les autres bibliothèques plus faciles à utiliser et compatibles avec sklearn. Ce n'est pas en soi une bibliothèque de réseaux de neurones, mais néanmoins recommandée. Au moment de l'écriture, c'est surtout pour les lasagnes, mais il y a du code Caffe et peut-être d'autres.
Mark
Vous ne savez pas exactement si c'est le même commentaire que Marks à propos de nolearn, mais github.com/aigamedev/scikit-neuralnetwork est également une sorte de wrapper pour ce genre de choses.
onaclov2000 le
5
Pour votre information: Pylearn2 n'a plus de développeur.
Franck Dernoncourt
Wow, c'est assez démodé après moins de deux ans
Martin Thoma
1
Pourquoi laisser de côté PyTorch?
Francesco Pegoraro
37

Tensor Flow ( Google Documents ) de Google est un autre cadre agréable à différenciation automatique. J'ai rédigé quelques réflexions rapides sur Google Tensor Flow sur mon blog, ainsi que l'exemple MNIST présenté dans leur didacticiel.

Voir aussi: Mon tutoriel Tensorflow XOR

Lasagne ( docs ) est très agréable, car il utilise le théo (→ vous pouvez utiliser le GPU) et le rend plus simple à utiliser. L'auteur de lasagnes a remporté le défi Kaggle Galaxy, à ma connaissance. C'est gentil avec nolearn . Voici un exemple de réseau MNIST:

#!/usr/bin/env python

import lasagne
from lasagne import layers
from lasagne.updates import nesterov_momentum
from nolearn.lasagne import NeuralNet

import sys
import os
import gzip
import pickle
import numpy


PY2 = sys.version_info[0] == 2

if PY2:
    from urllib import urlretrieve

    def pickle_load(f, encoding):
        return pickle.load(f)
else:
    from urllib.request import urlretrieve

    def pickle_load(f, encoding):
        return pickle.load(f, encoding=encoding)

DATA_URL = 'http://deeplearning.net/data/mnist/mnist.pkl.gz'
DATA_FILENAME = 'mnist.pkl.gz'


def _load_data(url=DATA_URL, filename=DATA_FILENAME):
    """Load data from `url` and store the result in `filename`."""
    if not os.path.exists(filename):
        print("Downloading MNIST dataset")
        urlretrieve(url, filename)

    with gzip.open(filename, 'rb') as f:
        return pickle_load(f, encoding='latin-1')


def load_data():
    """Get data with labels, split into training, validation and test set."""
    data = _load_data()
    X_train, y_train = data[0]
    X_valid, y_valid = data[1]
    X_test, y_test = data[2]
    y_train = numpy.asarray(y_train, dtype=numpy.int32)
    y_valid = numpy.asarray(y_valid, dtype=numpy.int32)
    y_test = numpy.asarray(y_test, dtype=numpy.int32)

    return dict(
        X_train=X_train,
        y_train=y_train,
        X_valid=X_valid,
        y_valid=y_valid,
        X_test=X_test,
        y_test=y_test,
        num_examples_train=X_train.shape[0],
        num_examples_valid=X_valid.shape[0],
        num_examples_test=X_test.shape[0],
        input_dim=X_train.shape[1],
        output_dim=10,
    )


def nn_example(data):
    net1 = NeuralNet(
        layers=[('input', layers.InputLayer),
                ('hidden', layers.DenseLayer),
                ('output', layers.DenseLayer),
                ],
        # layer parameters:
        input_shape=(None, 28*28),
        hidden_num_units=100,  # number of units in 'hidden' layer
        output_nonlinearity=lasagne.nonlinearities.softmax,
        output_num_units=10,  # 10 target values for the digits 0, 1, 2, ..., 9

        # optimization method:
        update=nesterov_momentum,
        update_learning_rate=0.01,
        update_momentum=0.9,

        max_epochs=10,
        verbose=1,
        )

    # Train the network
    net1.fit(data['X_train'], data['y_train'])

    # Try the network on new data
    print("Feature vector (100-110): %s" % data['X_test'][0][100:110])
    print("Label: %s" % str(data['y_test'][0]))
    print("Predicted: %s" % str(net1.predict([data['X_test'][0]])))


def main():
    data = load_data()
    print("Got %i testing datasets." % len(data['X_train']))
    nn_example(data)

if __name__ == '__main__':
    main()

Caffe est une bibliothèque C ++, mais possède des liaisons Python. Vous pouvez faire la plupart des choses avec des fichiers de configuration (prototxt). Il a beaucoup d'options et peut également utiliser le GPU.

Martin Thoma
la source
22

Pylearn s’appuie sur Theano et, comme mentionné dans l’autre réponse, utiliser la bibliothèque est assez compliqué, jusqu’à ce que vous en ayez le contrôle.

En attendant, je suggère d'utiliser Theanets . Il a également été construit sur Theano, mais il est beaucoup plus facile de travailler avec. C'est peut-être vrai qu'il ne possède pas toutes les fonctionnalités de Pylearn, mais pour le travail de base, cela suffit.

En outre, il est open source, vous pouvez donc ajouter des réseaux personnalisés à la volée, si vous osez. :)

EDIT: Dec 2015. Récemment, j'ai commencé à utiliser Keras . C'est un peu plus bas que Theanets, mais beaucoup plus puissant. Theanets est approprié pour les tests de base. Mais si vous voulez faire des recherches dans le domaine de ANN, Keras est beaucoup plus flexible. De plus, les Keras peuvent utiliser Tensorflow comme back -end.

Jnovacho
la source
19

TensorFlow (par Google, publié le 09/11/2015) semble prometteur.

  • open source (licence Apache 2.0) ( GitHub )
  • Python (backend en C ++)
  • CPU / GPU
  • Auto-différenciation
  • Portable (fonctionne même sur les appareils mobiles)

entrez la description de l'image ici

FYI:

Franck Dernoncourt
la source
3
Aargh! Tu m'as battu :) En effet, TensorFlow est super bon. A un meilleur temps de compilation que les gros canons là-bas comme Theano, Torch, etc.
Dawny33
@ Dawny33 Qu'entendez-vous par "temps de compilation"? Theano, Torch et la plupart du temps TensorFlow sont utilisés de manière interprétée.
Martin Thoma
@moose Dans Theano au moins, du code est compilé en C ++ ou CUDA.
Franck Dernoncourt
@FranckDernoncourt D'accord, mais est-ce que le moment compte vraiment? Lorsque l'entraînement dure environ 20 minutes, le temps nécessaire à la génération du code CUDA n'est-il pas égal à quelques secondes? (Comment puis-je mesurer cela?)
Martin Thoma
2
@moose Dans Theano, la génération du code CUDA / C ++ prend environ 30 secondes à une minute pour un modèle de taille raisonnable. Cela rend le débogage assez fastidieux. Pour mesurer le temps de génération de code CUDA / C ++, vous pouvez mettre du temps avant / après la compilation d’une fonction Theano.
Franck Dernoncourt
8

Pylearn2 semble être la bibliothèque de choix, mais je trouve leurs fichiers de configuration YAML déconcertants.

Python lui-même a été conçu pour être un langage simple pour le prototypage. Pourquoi ne l' utilisez- vous pas pour définir les propriétés du réseau elles-mêmes? Nous avons d'excellents éditeurs dotés de fonctions d'auto-complétion qui vous faciliteraient grandement la vie. Python n'est pas comme le C ++ où vous devez attendre de longues générations pour pouvoir exécuter votre code.

Les fichiers YAML, d’autre part, vous devez les éditer à l’aide d’un éditeur de texte standard sans aucune aide, ce qui rend la courbe d’apprentissage encore plus raide.

Il se peut que je manque la vue d'ensemble mais je ne comprends toujours pas à quoi ils pensaient. Je ne pense pas que le prototypage en code serait beaucoup plus lent. Pour cette raison, je considère Theanets ou j'utilise Theano directement.

royalstream
la source
1
Les fichiers YAML m'ont un peu gêné au début, mais je suis depuis adoré la séparation nette entre la configuration et le code. Vous pouvez choisir d'utiliser Pylearn2 sans les fichiers YAML, bien que cette option ne soit pas bien documentée.
Madison mai
En bref, cependant, je ne voudrais pas jeter la bibliothèque à cause de cette décision de conception simple.
Madison mai
Comme Madison peut le mentionner, il est uniquement question de séparer la configuration et le code. Ce serait bien si vous utilisiez un seul réseau et connaissiez tous les paramètres, mais vous ne le savez pas. en séparant config et code, vous pouvez exécuter plusieurs réseaux - différents neurones cachés, etc., etc., et le contrôle de la source est simple (comment garder la trace de la configuration que vous avez essayée si vous la conservez dans le code).
seanv507
8

J'aime Blocks , qui est également construit sur Theano. Bien plus accessible que PyLearn2 et plus riche en fonctionnalités que Lasagne. Soigneusement écrit, aussi.

Mis à jour en janvier 2016:

Au moment de la rédaction, Keras a de loin le plus d’élan. Il est hautement modulaire et peut fonctionner à la fois sur Theano et Tensorflow, ce qui lui donne de grandes opportunités.

Def_Os
la source
Oui, je recommanderais actuellement les blocs au lieu de pylearn2 si vous voulez bien prendre un peu de temps pour comprendre Theano.
Madison mai
Grande bibliothèque construite par des gens formidables.
Madison mai
6

MXNet :

  • écrit en C ++ mais possède une API en Python (et quelques autres langages de programmation tels que R, Julia et Go)
  • Échelle jusqu'à plusieurs GPU et configuration distribuée avec parallélisme automatique.
  • Différenciation automatique
  • Performances décentes:

entrez la description de l'image ici

Franck Dernoncourt
la source
5

D'après ce que j'ai entendu, Pylearn2 pourrait être actuellement la bibliothèque de choix pour la plupart des gens. Cela me rappelle un récent article de blog publié il y a quelques mois, qui répertorie toutes les différentes bibliothèques d'apprentissage machine avec une courte explication.

https://www.cbinsights.com/blog/python-tools-machine-learning

La section qui pourrait vous intéresser serait "Apprentissage en profondeur". À propos de Pylearn2, écrit-il

PyLearn2

Il existe une autre bibliothèque construite au-dessus de Theano, appelée PyLearn2, qui apporte modularité et configurabilité à Theano, où vous pouvez créer votre réseau de neurones à l'aide de différents fichiers de configuration, de manière à faciliter l'expérimentation de différents paramètres. On peut dire que cela offre plus de modularité en séparant les paramètres et les propriétés du réseau de neurones dans le fichier de configuration.

utilisateur2556
la source
5

J'ai écrit ce post en détaillant certains de mes favoris personnels:

Les meilleures bibliothèques d'apprentissage machine en Python

Comme plus de 30 bibliothèques différentes sont mentionnées, je ne les posterai pas toutes ici, mais celles-ci sont parmi les plus populaires:

(Désolé, impossible de créer un lien vers le dépôt Github puisque mon représentant est toujours <10 ...)

Edit: Ajout de liens vers les dépôts Github.

srobinson
la source
Pouvez-vous commenter le lien sous mon commentaire ici? Je vais l'éditer et l'ajouter à votre réponse
Dawny33
Maintenant que ma réponse a été votée, j'ai maintenant le représentant requis et j'ai pu ajouter les liens. Merci quand même!
Srobinson
Etes-vous sûr que scikit-learn est un paquet DN?
SmallChess
4

néon :

Franck Dernoncourt
la source
4

Juste pour ajouter quelques ressources supplémentaires. Récemment, un article a étudié les différences entre plusieurs ensembles de réseaux de neurones et de réseaux de neurones profonds.

Ici vous pouvez trouver l' information . Il semble que Torch et TensorFlow soient les gagnants.

Note: tous ne sont pas en python. Cependant, je l'ai posté pour ouvrir la discussion.

hoaphumanoïde
la source
2

DyNet: la boîte à outils du réseau neuronal dynamique. À partir de 1}:

Nous décrivons DyNet, une boîte à outils pour la mise en œuvre de modèles de réseau de neurones basés sur la déclaration dynamique de la structure de réseau. Dans la stratégie de déclaration statique utilisée dans des boîtes à outils telles que Theano, CNTK et TensorFlow, l'utilisateur définit d'abord un graphe de calcul (représentation symbolique du calcul), puis des exemples sont introduits dans un moteur qui exécute ce calcul et en calcule les dérivés. . Dans la stratégie de déclaration dynamique de DyNet, la construction du graphe de calcul est généralement transparente. Elle est implicitement construite en exécutant un code de procédure qui calcule les sorties du réseau, et l'utilisateur est libre d'utiliser différentes structures de réseau pour chaque entrée. La déclaration dynamique facilite ainsi la mise en œuvre d'architectures de réseau plus complexes. et DyNet est spécialement conçu pour permettre aux utilisateurs d’implémenter leurs modèles d’une manière idiomatique dans leur langage de programmation préféré (C ++ ou Python). Un défi avec la déclaration dynamique est que, comme le graphe de calcul symbolique est défini à nouveau pour chaque exemple d’entraînement, sa construction doit être peu onéreuse. Pour ce faire, DyNet dispose d’un backend C ++ optimisé et d’une représentation graphique légère. Les expériences ont montré que les vitesses de DyNet sont supérieures ou comparables à celles des outils de déclaration statique et nettement plus rapides que Chainer, un autre outil de déclaration dynamique. DyNet est publié open-source sous la licence Apache 2.0 et disponible à l'adresse Un défi avec la déclaration dynamique est que, comme le graphe de calcul symbolique est défini à nouveau pour chaque exemple d’entraînement, sa construction doit être peu onéreuse. Pour ce faire, DyNet dispose d’un backend C ++ optimisé et d’une représentation graphique légère. Les expériences ont montré que les vitesses de DyNet sont supérieures ou comparables à celles des outils de déclaration statique et nettement plus rapides que Chainer, un autre outil de déclaration dynamique. DyNet est publié open-source sous la licence Apache 2.0 et disponible à l'adresse Un défi avec la déclaration dynamique est que, comme le graphe de calcul symbolique est défini à nouveau pour chaque exemple d’entraînement, sa construction doit être peu onéreuse. Pour ce faire, DyNet dispose d’un backend C ++ optimisé et d’une représentation graphique légère. Les expériences ont montré que les vitesses de DyNet sont supérieures ou comparables à celles des outils de déclaration statique et nettement plus rapides que Chainer, un autre outil de déclaration dynamique. DyNet est publié open-source sous la licence Apache 2.0 et disponible à l'adressecette URL http

Il était auparavant connu sous le nom de cnn (dont la liaison python était appelée pycnn).


Références:

  • {1} Graham Neubig, Chris Dyer, Yoav Goldberg, Austin Matthews, Waleed Ammar, Antonios Anastasopoulos, Miguel Ballesteros, David Chiang, Daniel Clothiaux, Trevor Cohn, Kevin Duh, Manaal Faruqui, Cynthia Gan, Dan Garrette, Yangfeng Ji, Lingpeng Kong , Adhiguna Kuncoro, Gaurav Kumar, Chaitanya Malaviya, Paul Michel, Yusuke Oda, Matthew Richardson, Naomi Saphra, Swabha Swayamdipta, Pengcheng Yin. DyNet: la boîte à outils du réseau neuronal dynamique. https://arxiv.org/abs/1701.03980
Franck Dernoncourt
la source
2

Je vous recommande d'utiliser tensorflow, qui est en plein développement et soutient l'apprentissage en profondeur. Vous pouvez utiliser l'API Keras de réseaux de neurones de haut niveau qui fonctionne au-dessus de tensorflow et est très simple à utiliser. Essayez simplement un didacticiel et vous allez l'adorer.

Federico Caccia
la source
2

PyTorch

Il gagne beaucoup de soutien en raison de sa facilité d'utilisation et de sa similitude avec Python de base.

Il fonctionne "ligne par ligne" (via des graphiques dynamiques), tout comme Python normal et peut être facilement débogué - même à l'aide d'instructions d'impression standard. Il s'intègre également très bien avec NumPy et d'autres linbraries Python bien connues, comme Scikit Learn.

Parce que cela facilite la modélisation, il est idéal pour le prototypage et l'exploration de nouvelles idées en général.

Il prend en charge plusieurs processeurs graphiques de manière très simple.

Découvrez plus de fonctionnalités ici .


Bien que de nombreux avantages décrits ci-dessus rendent PyTorch beaucoup plus agréable à utiliser que d’autres bibliothèques couramment utilisées, il convient de noter que la version majeure à venir de Tensorflow utilisera également, par défaut, la création de graphes dynamiques ( mode rapide ). Cela le rendra comparable à PyTorch en utilisation.

n1k31t4
la source
1

NeuPy est une bibliothèque Python pour les réseaux de neurones artificiels. NeuPy prend en charge de nombreux types de réseaux de neurones allant du simple perceptron aux modèles d'apprentissage en profondeur.

Itdxer
la source