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ı?
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ı?
Yanıtlar:
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.
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.
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 .
TensorFlow (Google tarafından 2015-11-09'da yayınlanan ) umut verici görünüyor.
Bilginize:
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.
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.
MXNet :
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.
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.
neon :
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.
Microsoft Cognition Toolkit (daha önce CNTK olarak bilinir) bir Python API'sine sahiptir . Diğer şeylerin yanı sıra, çoklu GPU için iyi olması gerekiyordu :
Örnekler ve öğreticiler https://github.com/Microsoft/CNTK/tree/master/bindings/python adresinde bulunabilir.
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:
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.
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.
Eğer performans karşılaştırmaları ilgileniyorsanız, Soumith Chintala önce bahsedilen piton çerçeveler (birkaç kapak convnet kriterler kümesi tutar TensorFlow , chainer , neon , Theano ):