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?
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?
Antworten:
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.
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.
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.
TensorFlow (von Google, veröffentlicht am 09.11.2015) sieht vielversprechend aus.
Zu Ihrer Information:
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.
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.
MXNet :
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.
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.
neon :
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.
Microsoft Cognition Toolkit (früher als CNTK bekannt) verfügt über eine Python-API . Unter anderem soll es für Multi-GPU gut sein :
Beispiele und Tutorials finden Sie unter https://github.com/Microsoft/CNTK/tree/master/bindings/python
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:
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.
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.
Wenn Sie an Leistungsvergleichen interessiert sind, verwaltet Soumith Chintala eine Reihe von Convnet-Benchmarks, die mehrere der bereits erwähnten Python-Frameworks ( TensorFlow , Chainer , Neon , Theano ) abdecken :