Beste Python-Bibliothek für neuronale Netze


130

Ich verwende neuronale Netze, um verschiedene Probleme des maschinellen Lernens zu lösen. Ich benutze Python und Pybrain, aber diese Bibliothek ist fast eingestellt. Gibt es andere gute Alternativen in Python?



5
Und jetzt gibt es einen neuen Anwärter - Scikit Neuralnetwork : Hat jemand schon Erfahrung damit? Wie ist es mit Pylearn2 oder Theano zu vergleichen?
Rafael_Espericueta

1
@Emre: Skalierbar ist anders als Hochleistung. Dies bedeutet normalerweise, dass Sie größere Probleme lösen können, indem Sie mehr Ressourcen des gleichen Typs hinzufügen, den Sie bereits haben. Die Skalierbarkeit gewinnt immer noch, wenn Sie über 100 Maschinen verfügen, auch wenn Ihre Software auf jeder um das 20-fache langsamer ist. . . (obwohl ich lieber den Preis für 5 Maschinen zahlen würde und sowohl die GPU als auch die Multi-Machine-Skalierung nutzen würde).
Neil Slater

2
Verwenden Sie also mehrere GPUs ... niemand verwendet CPUs für ernsthafte Arbeiten in neuronalen Netzwerken. Wenn Sie mit einer oder zwei guten GPUs eine Leistung auf Google-Ebene erzielen können, was machen Sie dann mit tausend CPUs?
Emre

4
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da dies ein Beispiel dafür ist, warum Empfehlungen und "beste" Fragen im Format nicht funktionieren. Die akzeptierte Antwort ist nach 12 Monaten faktisch ungenau (PyLearn2 ist in dieser Zeit von "aktiver Entwicklung" zu "Akzeptieren von Patches" übergegangen)
Neil Slater,

Antworten:


116

UPDATE: Die Landschaft hat sich ziemlich verändert, seit ich diese Frage im Juli '14 beantwortet habe und einige neue Spieler den Raum betreten haben. Insbesondere würde ich empfehlen, Folgendes zu überprüfen:

Sie haben jeweils ihre Stärken und Schwächen. Probieren Sie also alle aus, welche am besten zu Ihrem Anwendungsfall passt. Obwohl ich vor einem Jahr die Verwendung von PyLearn2 empfohlen hätte, ist die Community nicht mehr aktiv, daher würde ich empfehlen, sich anderswo umzusehen. Meine ursprüngliche Antwort auf die Antwort ist unten aufgeführt, aber an dieser Stelle weitgehend irrelevant.


PyLearn2 wird allgemein als die Bibliothek der Wahl für neuronale Netze und Deep Learning in Python angesehen. Es ist eher für einfaches wissenschaftliches Experimentieren als für einfache Bedienung konzipiert, sodass die Lernkurve recht steil ist. Wenn Sie sich jedoch Zeit nehmen und die Tutorials befolgen, werden Sie mit den darin enthaltenen Funktionen zufrieden sein. Von Standard-Multilayer-Perzeptronen über eingeschränkte Boltzmann-Maschinen bis hin zu Faltungsnetzen und Autoencodern wird alles geboten. Es gibt eine großartige GPU-Unterstützung und alles basiert auf Theano, sodass die Leistung in der Regel recht gut ist. Die Quelle für PyLearn2 ist auf github verfügbar .

Beachten Sie, dass PyLearn2 derzeit das gegenteilige Problem von PyBrain hat - anstatt aufgegeben zu werden, befindet sich PyLearn2 in der aktiven Entwicklung und unterliegt häufigen Änderungen.


Beachten Sie, dass nolearn ein Wrapper ist, der die Verwendung anderer Bibliotheken vereinfacht und mit sklearn kompatibel macht. Es ist an sich keine neuronale Netzwerkbibliothek, wird aber dennoch empfohlen. Zum Zeitpunkt des Schreibens ist es hauptsächlich für Lasagne, aber es gibt einige Caffe-Codes und vielleicht andere.
Mark

Ich bin mir nicht sicher, ob es mit Marks Kommentar zu nolearn identisch ist, aber github.com/aigamedev/scikit-neuralnetwork ist auch eine Art Wrapper für ein paar dieser Dinge.
onaclov2000,


Wow, das ist nach weniger als zwei Jahren ziemlich veraltet
Martin Thoma

1
Warum PyTorch weglassen?
Francesco Pegoraro

37

Tensor Flow ( docs ) von Google ist ein weiteres nützliches Framework mit automatischer Unterscheidung. Ich habe in meinem Blog einige kurze Gedanken zu Google Tensor Flow zusammen mit dem MNIST-Beispiel niedergeschrieben, das sie in ihrem Tutorial haben.

Siehe auch: Mein Tensorflow XOR-Tutorial

Lasagne ( docs ) ist sehr schön, da es theano verwendet (→ Sie können die GPU verwenden) und es einfacher zu bedienen macht. Der Autor der Lasagne hat meines Wissens die Kaggle Galaxy Challenge gewonnen. Es ist schön mit Nolearn . Hier ist ein MNIST-Beispielnetzwerk:

#!/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 ist eine C ++ - Bibliothek, verfügt jedoch über Python-Bindungen. Sie können die meisten Dinge mit Konfigurationsdateien (prototxt) erledigen. Es hat viele Möglichkeiten und kann auch die GPU nutzen.


22

Pylearn verlässt sich auf Theano und wie in der anderen Antwort erwähnt, ist die Nutzung der Bibliothek ziemlich kompliziert, bis Sie sie in den Griff bekommen.

In der Zwischenzeit würde ich vorschlagen, Theanets zu verwenden . Es baut ebenfalls auf Theano auf, ist aber viel einfacher zu handhaben. Es mag sein, dass es nicht alle Funktionen von Pylearn bietet, aber für die Grundarbeit ist es ausreichend.

Außerdem ist es Open Source, sodass Sie jederzeit benutzerdefinierte Netzwerke hinzufügen können, wenn Sie sich trauen. :)

EDIT: Dezember 2015. Seit kurzem benutze ich Keras . Es ist ein bisschen niedriger als Theanets, aber viel mächtiger. Für Basistests eignen sich die Theanets. Wenn Sie jedoch im Bereich ANN forschen möchten, ist Keras wesentlich flexibler. Außerdem können die Keras Tensorflow als Backend verwenden.


19

TensorFlow (von Google, veröffentlicht am 09.11.2015) sieht vielversprechend aus.

  • Open Source (Apache 2.0 Lizenz) ( GitHub )
  • Python (Backend in C ++)
  • CPU / GPU
  • Auto-Differenzierung
  • Portable (funktioniert auch auf mobilen Geräten)

Bildbeschreibung hier eingeben

Zu Ihrer Information:


3
Aargh! Du hast mich geschlagen :) TensorFlow ist in der Tat super gut. Hat eine bessere Kompilierzeit als die großen Kanonen wie Theano, Torch usw.
Dawny33

@ Dawny33 Was meinst du mit "Kompilierzeit"? Theano, Torch und meistens auch TensorFlow werden interpretiert eingesetzt.
Martin Thoma

@moose Zumindest in Theano wird Code in C ++ oder CUDA kompiliert.
Franck Dernoncourt

@FranckDernoncourt Ok, aber ist diese Zeit wirklich wichtig? Wenn das Training ungefähr 20 Minuten dauert, sind es nicht nur ein paar Sekunden, um den CUDA-Code zu generieren? (Wie kann ich das messen?)
Martin Thoma

2
@moose In Theano dauert das Generieren des CUDA / C ++ - Codes für ein Modell mit angemessener Größe etwa 30 Sekunden bis 1 Minute. Es macht das Debuggen ziemlich mühsam. Um die Generierungszeit von CUDA / C ++ zu messen, können Sie die Zeit vor / nach dem Kompilieren einer Theano-Funktion eingeben.
Franck Dernoncourt

8

Pylearn2 scheint die Bibliothek der Wahl zu sein, aber ich finde ihre YAML-Konfigurationsdateien abstoßend.

Python selbst wurde als einfache Sprache für das Prototyping entwickelt. Warum sollten Sie sie nicht verwenden, um die Netzwerkeigenschaften selbst zu definieren? Wir haben großartige Editoren mit automatischer Vervollständigung, die Ihnen das Leben erheblich erleichtern würden, und Python ist nicht wie C ++, bei dem Sie auf lange Builds warten müssen, bevor Sie Ihren Code ausführen können.

YAML-Dateien müssen hingegen mit einem Standard-Texteditor ohne jegliche Unterstützung bearbeitet werden, was die Lernkurve noch steiler macht.

Mir fehlt vielleicht das Gesamtbild, aber ich verstehe immer noch nicht, was sie dachten. Ich denke nicht, dass das Prototyping im Code viel langsamer sein würde. Aus diesem Grund denke ich über Theanets nach oder verwende Theano direkt.


1
Ich war auch ein bisschen von den YAML-Dateien begeistert, habe aber seitdem die saubere Trennung zwischen Konfiguration und Code geliebt. Sie können Pylearn2 auch ohne YAML-Dateien verwenden, obwohl diese Option nicht gut dokumentiert ist.
Madison

Kurz gesagt, ich würde die Bibliothek aufgrund dieser einfachen Entwurfsentscheidung nicht verwerfen.
Madison

Wie Madison sagte, geht es hier nur um die Trennung von Konfiguration und Code. Es wäre in Ordnung, wenn Sie ein Netzwerk betreiben und alle Parameter kennen, aber Sie wissen es nicht. Durch Aufteilen von Konfiguration und Code können Sie mehrere Netzwerke ausführen - verschiedene versteckte Neuronen usw. Die Quellcodeverwaltung ist unkompliziert.
Seanv507

8

Ich mag Blocks , die ebenfalls auf Theano aufbauen. Weit zugänglicher als PyLearn2 und funktionsreicher als Lasagne. Auch ordentlich geschrieben.

Aktualisiert im Januar 2016:

Zum Zeitpunkt des Schreibens hat Keras die mit Abstand größte Dynamik. Es ist sehr modular aufgebaut und kann sowohl mit Theano als auch mit Tensorflow betrieben werden.


Ja, ich würde derzeit Blocks über pylearn2 empfehlen, wenn Sie ein wenig Zeit haben, um Theano zu verstehen.
Madison

Tolle Bibliothek, gebaut von tollen Leuten.
Madison

6

MXNet :

  • in C ++ geschrieben, aber mit einer API in Python (und einigen anderen Programmiersprachen wie R, Julia und Go)
  • Skaliert auf mehrere GPUs und verteilte Einstellungen mit automatischer Parallelisierung.
  • Automatische Differenzierung
  • Anständige Leistungen:

Bildbeschreibung hier eingeben


5

Nach allem, was ich gehört habe, ist Pylearn2 derzeit die Bibliothek der Wahl für die meisten Menschen. Dies erinnert mich an einen Blogeintrag vor einigen Monaten, in dem alle verschiedenen maschinellen Lernbibliotheken mit einer kurzen Erklärung aufgelistet sind

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

Der Abschnitt, der Sie hier interessieren könnte, wäre "Deep Learning". Über Pylearn2 schreibt er

PyLearn2

Auf Theano basiert eine weitere Bibliothek namens PyLearn2, die Modularität und Konfigurierbarkeit für Theano bietet. Hier können Sie Ihr neuronales Netzwerk mithilfe verschiedener Konfigurationsdateien erstellen, um verschiedene Parameter leichter zu testen. Möglicherweise bietet es mehr Modularität, indem die Parameter und Eigenschaften des neuronalen Netzwerks in der Konfigurationsdatei getrennt werden.


5

Ich habe diesen Beitrag mit einigen meiner persönlichen Favoriten verfasst:

Die besten maschinellen Lernbibliotheken in Python

Da über 30 verschiedene Bibliotheken erwähnt werden, werde ich nicht alle hier veröffentlichen, aber diese gehören zu den beliebtesten:

(Entschuldigung, ich kann keine Verbindung zu den Github-Repos herstellen, da mein Rep immer noch <10 ist ...)

Bearbeiten: Links zu Github-Repos hinzugefügt.


Können Sie den Link unter meinem Kommentar hier kommentieren? Ich bearbeite es und füge es deiner Antwort hinzu
Dawny33

Nachdem meine Antwort positiv bewertet wurde, habe ich nun den erforderlichen Mitarbeiter und konnte die Links hinzufügen. Trotzdem danke!
Srobinson

Sind Sie sicher, dass scikit-learn ein DN-Paket ist?
SmallChess


4

Nur um mehr Ressourcen hinzuzufügen. Kürzlich gab es einen Artikel, der die Unterschiede zwischen mehreren Paketen neuronaler Netze und tiefer neuronaler Netze untersuchte.

Hier finden Sie die Informationen . Es sieht so aus, als ob Torch und TensorFlow die Gewinner sind.

Hinweis: Nicht alle von ihnen sind in Python. Ich habe es jedoch gepostet, um die Diskussion zu eröffnen.



2

DyNet: Das Dynamic Neural Network Toolkit. Von {1}:

Wir beschreiben DyNet, ein Toolkit zur Implementierung neuronaler Netzwerkmodelle basierend auf der dynamischen Deklaration der Netzwerkstruktur. In der Strategie zur statischen Deklaration, die in Toolkits wie Theano, CNTK und TensorFlow verwendet wird, definiert der Benutzer zunächst ein Berechnungsdiagramm (eine symbolische Darstellung der Berechnung). Anschließend werden Beispiele in eine Engine eingegeben, die diese Berechnung ausführt und deren Ableitungen berechnet . In der dynamischen Deklarationsstrategie von DyNet ist die Erstellung von Berechnungsgraphen größtenteils transparent. Sie wird implizit durch Ausführen von Prozedurcode erstellt, der die Netzwerkausgaben berechnet, und der Benutzer kann für jede Eingabe unterschiedliche Netzwerkstrukturen verwenden. Die dynamische Deklaration erleichtert somit die Implementierung komplizierterer Netzwerkarchitekturen. DyNet wurde speziell entwickelt, um es Benutzern zu ermöglichen, ihre Modelle auf eine Weise zu implementieren, die für ihre bevorzugte Programmiersprache (C ++ oder Python) typisch ist. Eine Herausforderung bei der dynamischen Deklaration besteht darin, dass die Konstruktion des symbolischen Berechnungsgraphen mit geringem Aufwand verbunden sein muss, da dieser für jedes Trainingsbeispiel neu definiert wird. Um dies zu erreichen, verfügt DyNet über ein optimiertes C ++ - Backend und eine übersichtliche Graphendarstellung. Experimente zeigen, dass DyNet schneller oder vergleichbar mit statischen Deklarations-Toolkits ist und deutlich schneller als Chainer, ein anderes Toolkit für dynamische Deklarationen. DyNet wird unter der Apache 2.0-Lizenz als Open Source-Version veröffentlicht und ist unter verfügbar Eine Herausforderung bei der dynamischen Deklaration besteht darin, dass die Konstruktion des symbolischen Berechnungsgraphen mit geringem Aufwand verbunden sein muss, da dieser für jedes Trainingsbeispiel neu definiert wird. Um dies zu erreichen, verfügt DyNet über ein optimiertes C ++ - Backend und eine übersichtliche Graphendarstellung. Experimente zeigen, dass DyNet schneller oder vergleichbar mit statischen Deklarations-Toolkits ist und deutlich schneller als Chainer, ein anderes Toolkit für dynamische Deklarationen. DyNet wird unter der Apache 2.0-Lizenz als Open Source-Version veröffentlicht und ist unter verfügbar Eine Herausforderung bei der dynamischen Deklaration besteht darin, dass die Konstruktion des symbolischen Berechnungsgraphen mit geringem Aufwand verbunden sein muss, da dieser für jedes Trainingsbeispiel neu definiert wird. Um dies zu erreichen, verfügt DyNet über ein optimiertes C ++ - Backend und eine übersichtliche Graphendarstellung. Experimente zeigen, dass DyNet schneller oder vergleichbar mit statischen Deklarations-Toolkits ist und deutlich schneller als Chainer, ein anderes Toolkit für dynamische Deklarationen. DyNet wird unter der Apache 2.0-Lizenz als Open Source-Version veröffentlicht und ist unter verfügbardiese http-URL

Es war früher als cnn bekannt (dessen Pythonbindung pycnn hieß).


Verweise:

  • {1} Graham Neubig, Chris Färber, 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: Das Dynamic Neural Network Toolkit. https://arxiv.org/abs/1701.03980

2

Ich empfehle Ihnen, Tensorflow zu verwenden, der sich in einer starken Entwicklung befindet und tiefes Lernen unterstützt. Sie können die API- Keras für neuronale Netze auf hoher Ebene verwenden , die auf Tensorflow ausgeführt werden und sehr einfach zu verwenden sind. Probieren Sie einfach ein Tutorial aus und Sie werden es lieben.


2

PyTorch

Es gewinnt viel Unterstützung aufgrund seiner einfachen Bedienung und Ähnlichkeit mit Python.

Es wird wie normales Python "zeilenweise" (über dynamische Diagramme) ausgeführt und kann problemlos getestet werden - auch mit Standarddruckanweisungen. Es lässt sich auch sehr gut in NumPy und andere bekannte Python-Linbraries wie Scikit Learn integrieren.

Da es das Modellieren vereinfacht, eignet es sich hervorragend zum Erstellen von Prototypen und zum Erkunden neuer Ideen im Allgemeinen.

Es unterstützt mehrere GPUs und das auf sehr einfache Weise.

Schauen Sie sich hier mehr Funktionen .


Obwohl viele der oben genannten Vorteile PyTorch viel benutzerfreundlicher machen als andere häufig verwendete Bibliotheken, ist es erwähnenswert, dass die kommende Hauptversion von Tensorflow standardmäßig auch die dynamische Diagrammerstellung (auch bekannt als Eifermodus ) verwendet. Dadurch wird es im Gebrauch mit PyTorch vergleichbar.



1

NeuPy ist eine Python-Bibliothek für künstliche neuronale Netze. NeuPy unterstützt viele verschiedene Arten von neuronalen Netzen, vom einfachen Perzeptron bis zum Deep-Learning-Modell.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.