Sinir ağları için en iyi piton kütüphanesi


130

Farklı Makine öğrenme problemlerini çözmek için Yapay Sinir Ağları kullanıyorum. Python ve pybrain kullanıyorum ama bu kütüphane neredeyse üretilmiyor. Python'da başka iyi alternatifler var mı?



5
Ve şimdi yeni bir rakip var - Scikit Neuralnetwork : Bununla ilgili deneyime sahip olan var mı? Pylearn2 veya Theano ile nasıl karşılaştırılır?
Rafael_Espericueta

1
@Emre: Ölçeklenebilir, yüksek performanstan farklıdır. Bu, genellikle sahip olduğunuz aynı türden daha fazla kaynak ekleyerek daha büyük sorunları çözebileceğiniz anlamına gelir. Yazılımınız her birinde 20 kat daha yavaş olsa bile, 100 makineniz olduğunda ölçeklenebilirlik hala kazanıyor. . . (Her ne kadar 5 makine için fiyat ödemeyi tercih etsem de, hem GPU hem de çoklu makine ölçeğinden faydalanabiliyorum).
Neil Slater,

2
Bu yüzden birden fazla GPU kullanın ... kimse sinir ağlarında ciddi işler için CPU kullanmaz. Google’daki performansı iyi bir GPU’dan çıkarabilirseniz, bin CPU’da ne yapacaksınız?
Emre,

4
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum, çünkü önerilerin ve "en iyi" soruların formatta neden işe yaramadığına dair bir poster haline geldi. Kabul edilen cevap aslında 12 ay sonra yanlış (PyLearn2 o zamanlar "aktif gelişimden" yamaları kabul etmeye "geçti)
Neil Slater

Yanıtlar:


116

GÜNCELLEME: Bu soruyu Temmuz '14'te cevapladığımdan bu yana manzara biraz değişti ve bazı yeni oyuncular alana girdi. Özellikle, kontrol etmenizi tavsiye ederim:

Her birinin güçlü ve zayıf yönleri vardır, bu nedenle hepsine bir göz atın ve kullanım durumunuza en uygun olanı görün. Her ne kadar bir yıl önce PyLearn2 kullanmanızı tavsiye etsem de, topluluk artık aktif değil, bu yüzden başka bir yere bakmanızı tavsiye ederim. Cevaba verilen cevabımın asıl cevabı aşağıda yer almaktadır, fakat bu noktada büyük ölçüde önemsizdir.


PyLearn2 genellikle sinir ağları ve python'da derin öğrenme için tercih edilen bir kütüphane olarak kabul edilir. Kolay kullanımdan ziyade kolay bilimsel deneyler için tasarlanmıştır, bu nedenle öğrenme eğrisi oldukça diktir, ancak zamanınızı alıp dersleri takip ederseniz sağladığı fonksiyonellikten memnun kalacağınızı düşünüyorum. Standart Çok Katmanlı Algılayıcılardan Sınırlandırılmış Boltzmann Makinelerine ve Konvolüsyonlu Ağlara ve Otomatik Kodlayıcılara kadar her şey sağlanır. Harika GPU desteği var ve her şey Theano'nun üzerine kurulu, bu nedenle performans genellikle oldukça iyi. PyLearn2 için kaynak kullanılabilir github .

PyLearn2'nin şu anda PyBrain'in tam tersi bir problemi olduğunu unutmayın - terk edilmek yerine, PyLearn2 aktif bir şekilde geliştirilmektedir ve sık sık değişikliklere tabidir.


Nolearn'ün, diğer kütüphanelerin kullanımı ve sklearn ile uyumlu olmasını sağlayan bir sarıcı olduğunu unutmayın. Kendi başına bir sinir ağı kütüphanesi değil, ancak yine de tavsiye edilir. Yazma sırasında çoğunlukla Lazanya için ama bazı Caffe kodları ve belki diğerleri var.
Mark

Marks'ın nolearn hakkındaki yorumu ile aynı olup olmadığından emin değiliz, ancak github.com/aigamedev/scikit-neuralnetwork aynı zamanda bu tür bir şeyler için bir paketleyici şeklidir.
onaclov2000


Vay canına, bu iki yıldan kısa bir süre sonra oldukça modası geçmiş
Martin Thoma

1
PyTorch'u neden dışarıda bıraktınız?
Francesco Pegoraro

37

Google'dan Tensor Flow ( docs ), otomatik olarak farklılaşan başka bir güzel çerçevedir. Blogumda Google Tensor Flow hakkında bazı kısa düşüncelerimi yazdık, MNIST örnekleri ile birlikte öğreticilerden aldım.

Ayrıca bakınız: Tensorflow XOR eğitimim

Lazanya ( dokümanlar ) çok hoş, çünkü theano kullanıyor (→ GPU'yu kullanabilirsiniz) ve kullanımını kolaylaştırıyor. Lazanya yazarı, bildiğim kadarıyla Kaggle Galaxy yarışmasını kazandı. Nolearn ile güzel . İşte bir MNIST örnek ağı:

#!/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 bir C ++ kütüphanesidir, fakat Python bağlantıları vardır. Çoğu şeyi yapılandırma dosyalarıyla (prototxt) yapabilirsiniz. Çok fazla seçeneğe sahip ve ayrıca GPU’dan da faydalanabilir.


22

Pylearn, Theano'ya güveniyor ve diğer cevapta da belirtildiği gibi kütüphaneyi kullanmak siz onu elde edene kadar oldukça karmaşık.

Bu arada Theanets kullanmanızı öneririm . Aynı zamanda Theano'nun üstüne inşa edilmiştir, ancak çalışması çok daha kolaydır. Pylearn'ün tüm özelliklerine sahip olmadığı doğru olabilir, ancak temel işler için yeterli.

Ayrıca açık kaynak kodudur, böylece cüret ederseniz anında özel ağlar ekleyebilirsiniz. :)

EDIT: Aralık 2015. Son zamanlarda Keras kullanmaya başladım . Theanet'lerden biraz daha düşük, ancak çok daha güçlü. Temel testler için Theanets uygundur. Ancak YSA Keras alanında bir araştırma yapmak istiyorsanız çok daha esnektir. Ayrıca Keras , Tensorflow'u arka uç olarak da kullanabilir .


19

TensorFlow (Google tarafından 2015-11-09'da yayınlanan ) umut verici görünüyor.

  • açık kaynak (Apache 2.0 Lisansı) ( GitHub )
  • Python (C ++ dilinde arka uç)
  • CPU / grafik işlemcisi
  • Otomatik Farklılaşma
  • Taşınabilir (mobil cihazlarda bile çalışır)

görüntü tanımını buraya girin

Bilginize:


3
Aargh! Beni yendin :) Gerçekten de, TensorFlow süper iyidir. Orada vb Theano, Torch, gibi büyük silahlar daha iyi derlemek zamanı var
Dawny33

@ Dawny33 "Derleme zamanı" ile ne demek istiyorsunuz? Theano, Torch ve çoğu zaman TensorFlow da yorumlanmış bir biçimde kullanılır.
Martin Thoma

@ moose Theano'da en azından bazı kodlar C ++ veya CUDA ile derlenir.
Franck Dernoncourt

@ FranckDernoncourt Tamam, ama bu zaman gerçekten önemli mi? Eğitimin yaklaşık 20 dakika sürmesi durumunda, CUDA kodunu oluşturmak için gereken süre sadece birkaç saniye değil mi? (Bunu nasıl ölçebilirim?)
Martin Thoma

2
@moose CUDA / C ++ kodunu üreten Theano'da makul büyüklükte bir model için yaklaşık 30 saniye ila bir dakika sürer. Hata ayıklamayı oldukça sıkıcı hale getirir. CUDA / C ++ kodu oluşturma zamanını ölçmek için, bir Theano işlevi derlenmeden önce / sonra zamanlayabilirsiniz.
Franck Dernoncourt

8

Pylearn2 tercih edilen kütüphane gibi görünüyor, ancak YAML konfigürasyon dosyalarını kullanıyorum.

Python kendisi neden olur, prototip için kolay bir dil olacak şekilde tasarlanmıştır değil ağ özelliklerini kendileri tanımlamak için kullanabilirsiniz? Otomatik tamamlama özelliğine sahip, hayatınızı çok daha kolaylaştıracak harika editörlerimiz var ve Python, kodunuzu çalıştırmadan önce uzun inşaatların bitmesini beklemek zorunda olduğunuz C ++ gibi değil.

Öte yandan, YAML dosyaları hiç bir yardım almadan standart bir metin editörü kullanarak düzenlemek zorundasınız ve bu öğrenme eğrisini daha da dikleştiriyor.

Büyük resmi kaçırıyor olabilirim ama hala ne düşündüklerini anlamıyorum, kodda prototip oluşturmanın çok daha yavaş olacağını düşünmüyorum. Bu nedenle Theanets'i düşünüyorum veya doğrudan Theano'yu kullanıyorum.


1
Ben de ilk başta YAML dosyaları tarafından biraz atıldım, ama o zamandan beri konfigürasyon ve kod arasındaki temiz ayrımı seviyorum. Bu seçenek iyi belgelenmemiş olsa da, Pylearn2'yi YAML dosyaları olmadan kullanmayı seçebilirsiniz.
Madison May

Kısacası, bu basit tasarım kararından dolayı kütüphaneyi atmayacağım.
Madison May

Madison, konfigürasyon ve kodu ayırmaktan bahsetti. Bir ağ kullanıyor olsaydınız ve tüm parametreleri biliyor olsaydınız iyi olurdu, ama yapmazsınız. config ve kodu bölerek birden fazla ağ çalıştırabilirsiniz - farklı gizli nöronlar vb. ve kaynak kontrolü açıktır (kodda tutarsanız hangi yapılandırmayı denediğinizi nasıl takip edersiniz).
seanv507

8

Sevdiğim Bloklar da Theano üzerine inşa edilmiştir. PyLearn2'den daha ulaşılabilir ve Lasagne'den daha zengin özelliklere sahip. Ayrıca düzgünce yazılmış.

Ocak 2016 güncellendi:

Keras yazarken, en fazla ivme kazanıyor. Oldukça modüler ve hem Theano hem de Tensorflow ile çalışarak harika fırsatlar sunuyor.


Evet, şu anda Theano'yu anlamak için biraz zaman harcadığınızda pylearn2'ye yönelik bloklar önereceğim.
Madison,

Harika insanlar tarafından yapılmış harika kütüphane.
Madison,

6

MXNet :

  • C ++ ile yazılmış ancak Python'da bir API (ve R, Julia ve Go gibi birkaç diğer programlama dili) vardır.
  • Otomatik paralelliğe sahip çoklu GPU'lara ve dağıtılmış ayara ölçeklendirir.
  • Otomatik farklılaşma
  • İyi performanslar:

görüntü tanımını buraya girin


5

Duyduğuma göre, Pylearn2 şu anda çoğu insan için tercih edilen kütüphane olabilir. Bu bana birkaç ay önce yeni bir blog yazısını hatırlatıyor, bu da farklı makine öğrenme kütüphanelerini kısa bir açıklama ile listeliyor.

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

Burada ilginizi çekebilecek bölüm "Derin Öğrenme" olacaktır. Pylearn2 hakkında yazıyor

PyLearn2

Theano'nun üstüne inşa edilmiş, PyLearn2 adında başka bir kütüphane var, bu da Theano'ya modülerlik ve yapılandırılabilirlik getiriyor, sinir ağınızı farklı konfigürasyon dosyaları ile yaratabiliyorsunuz, böylece farklı parametreleri denemek daha kolay olacak. Muhtemelen, sinir ağının parametrelerini ve özelliklerini yapılandırma dosyasına ayırarak daha fazla modülerlik sağlar.


5

Bu favoriyi kişisel favorilerimin bazılarını ayrıntılarıyla yazdım:

Python'daki En İyi Makine Öğrenme Kütüphaneleri

30'dan fazla farklı kütüphaneden bahsedildiğinden, hepsini buraya göndermeyeceğim, ama bunlar en popüler olanlardan:

(Üzgünüm, temsilcim hala <10 olduğu için Github repolarına bağlanamıyor.)

Düzenleme: Github depolarına bağlantılar eklendi.


Buradaki yorumumun altındaki bağlantıya yorum yapabilir misiniz? Cevabınızı düzenleyip ekleyeceğim
Dawny33

Şimdi cevabım yükseltildiğine göre, şimdi gerekli temsilcime sahibim ve bağlantıları ekleyebildim. Yine de teşekkürler!
srobinson

Scikit-learn'ın bir DN paketi olduğundan emin misiniz?
SmallChess


4

Sadece biraz daha kaynak eklemek için. Son zamanlarda, çeşitli sinir ağı paketleri ile derin sinir ağları arasındaki farkları inceleyen bir makale vardı.

Burada bilgiyi bulabilirsiniz . O görünüyor Meşale ve TensorFlow kazananlar.

Not: hepsi python'da değildir. Ancak, tartışmayı açmak için gönderdim.



2

DyNet: Dinamik Sinir Ağı Araç Takımı. 1'den}:

Ağ yapısının dinamik bildirgesine dayanarak sinir ağı modellerini uygulamak için bir araç seti olan DyNet'i tarif ediyoruz. Theano, CNTK ve TensorFlow gibi araç setlerinde kullanılan statik bildirim stratejisinde, kullanıcı ilk önce bir hesaplama grafiği tanımlar (hesaplamanın sembolik bir gösterimi) ve sonra örnekler bu hesaplamayı yürüten ve türevlerini hesaplayan bir motora beslenir. . DyNet'in dinamik bildirim stratejisinde, hesaplama grafiği yapısı çoğunlukla saydamdır, örtük olarak ağ çıktılarını hesaplayan prosedür kodunu uygulayarak oluşturulmuştur ve kullanıcı her girdi için farklı ağ yapıları kullanmakta serbesttir. Dinamik bildirim böylece daha karmaşık ağ mimarilerinin uygulanmasını kolaylaştırır, DyNet, kullanıcıların modellerini tercih ettikleri programlama dilinde (C ++ veya Python) deyimsel bir şekilde uygulamalarını sağlamak için özel olarak tasarlanmıştır. Dinamik bildirim ile ilgili bir zorluk, sembolik hesaplama grafiğinin her eğitim örneği için yeniden tanımlandığı için yapısının düşük ek yüke sahip olması gerektiğidir. Bunu başarmak için DyNet, optimize edilmiş bir C ++ arka ucuna ve hafif grafik gösterime sahiptir. Deneyler, DyNet'in hızlarının statik bildirim araç takımlarından daha hızlı veya karşılaştırılabilir olduğunu ve başka bir dinamik bildirim araç takımı olan Chainer'den önemli ölçüde daha yüksek olduğunu gösteriyor. DyNet Apache 2.0 lisansı altında açık kaynak kodlu Dinamik bildirim ile ilgili bir zorluk, sembolik hesaplama grafiğinin her eğitim örneği için yeniden tanımlandığı için yapısının düşük ek yüke sahip olması gerektiğidir. Bunu başarmak için DyNet, optimize edilmiş bir C ++ arka ucuna ve hafif grafik gösterime sahiptir. Deneyler, DyNet'in hızlarının statik bildirim araç takımlarından daha hızlı veya karşılaştırılabilir olduğunu ve başka bir dinamik bildirim araç takımı olan Chainer'den önemli ölçüde daha yüksek olduğunu gösteriyor. DyNet Apache 2.0 lisansı altında açık kaynak kodlu Dinamik bildirim ile ilgili bir zorluk, sembolik hesaplama grafiğinin her eğitim örneği için yeniden tanımlandığı için yapısının düşük ek yüke sahip olması gerektiğidir. Bunu başarmak için DyNet, optimize edilmiş bir C ++ arka ucuna ve hafif grafik gösterime sahiptir. Deneyler, DyNet'in hızlarının statik bildirim araç takımlarından daha hızlı veya karşılaştırılabilir olduğunu ve başka bir dinamik bildirim araç takımı olan Chainer'den önemli ölçüde daha yüksek olduğunu gösteriyor. DyNet Apache 2.0 lisansı altında açık kaynak kodlubu http URL

Daha önce cnn (python bağlaması pycnn olarak adlandırılmış) olarak biliniyordu.


Referanslar:

  • {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: Dinamik Sinir Ağı Araç Takımı. https://arxiv.org/abs/1701.03980

2

Güçlü gelişmekte olan ve derin öğrenmeyi destekleyen tensorflow'u kullanmanızı öneririm . Sen üst düzey sinir ağları API kullanabilirsiniz Keras sadece deneyin tensorflow üstünde çalışır ve çok sade bir şekilde kullanmaktır öğretici ve bunu seveceksin.


2

PyTorch

Temel Python ile kullanım kolaylığı ve benzerliği nedeniyle çok fazla destek kazanıyor.

Tıpkı normal Python gibi "satır satır" (dinamik grafiklerle) çalışır ve standart baskı ifadeleri kullanarak bile kolayca hata ayıklanabilir. Ayrıca Numkit ve Scikit Learn gibi diğer tanınmış Python markalarıyla da iyi bir şekilde bütünleşir.

Modellemeyi kolaylaştırdığı için prototip oluşturma ve genel olarak yeni fikirleri keşfetme için harika.

Birden fazla GPU'yu destekler ve bunu gerçekten kolay bir şekilde yapar.

Burada daha fazla özellik göz atın .


Yukarıdaki faydaların çoğu PyTorch'u diğer yaygın kullanılan kütüphanelere göre kullanmaktan daha iyi hale getirse de, yaklaşmakta olan Tensorflow'un ana sürümünün varsayılan olarak dinamik grafik oluşturma (aka istekli modu ) kullanacağını belirtmekte fayda var . Bu, kullanımdaki PyTorch ile karşılaştırılabilir hale getirecektir.



1

NeuPy Yapay Sinir Ağları için bir Python kütüphanesidir. NeuPy, basit bir algılayıcıdan derin öğrenme modellerine kadar birçok farklı Sinir Ağı türünü destekler.

Licensed under cc by-sa 3.0 with attribution required.