Я використовую нейронні мережі для вирішення різних проблем машинного навчання. Я використовую Python та pybrain, але ця бібліотека майже припинена. Чи є інші хороші альтернативи в Python?
Я використовую нейронні мережі для вирішення різних проблем машинного навчання. Я використовую Python та pybrain, але ця бібліотека майже припинена. Чи є інші хороші альтернативи в Python?
Відповіді:
ОНОВЛЕННЯ: ландшафт змінився досить сильно, оскільки я відповів на це запитання у липні 14 року, і деякі нові гравці вийшли на місце. Зокрема, я рекомендую перевірити:
Кожен з них має свої сильні та слабкі сторони, тож дайте їм усе зрозуміти, що найкраще відповідає вашому використанню. Хоча я б рекомендував використовувати PyLearn2 рік тому, спільнота більше не активна, тому я б рекомендував шукати в іншому місці. Моя оригінальна відповідь на відповідь наведена нижче, але в цьому питанні в основному не має значення.
PyLearn2, як правило, вважається бібліотекою вибору для нейронних мереж та глибокого вивчення пітона. Він розроблений для легкого наукового експерименту, а не простоти використання, тому крива навчання досить крута, але якщо ви витратите свій час і дотримуєтесь навчальних посібників, я думаю, ви будете задоволені функціоналом, який він надає. Пропонується все, від стандартних багатошарових перцептонів до обмежених машин Больцмана до згорткових мереж до автокодер. Є чудова підтримка GPU, і все побудовано на вершині Theano, тому продуктивність, як правило, досить хороша. Джерело для PyLearn2 доступне на github .
Майте на увазі, що PyLearn2 наразі має протилежну проблему PyBrain - замість того, щоб бути покинутим, PyLearn2 знаходиться в активному розвитку і зазнає частих змін.
Tensor Flow ( документи ) від Google - ще одна приємна рамка, яка має автоматичну диференціацію. Я записав у свій блог кілька швидких думок про Google Tensor Flow разом із прикладом MNIST, який вони містять у своєму підручнику.
Дивіться також: Мій підручник з Tensorflow XOR
Лазань ( docs ) дуже приємно, оскільки він використовує theano (→ ви можете використовувати GPU) і робить його більш простим. Наскільки я знаю, автор лазаньї виграв виклик «Кагл Галактика». Це добре з noararn . Ось приклад мережі 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 - це бібліотека C ++, але має вкладення Python. Більшість речей можна робити за допомогою файлів конфігурації (прототексту). У ньому багато варіантів, а також можна використовувати графічний процесор.
Пілеарн покладається на Теано, і як уже згадувалося в іншій відповіді, користуватися бібліотекою досить складно, доки ви не отримаєте її.
Тим часом я б запропонував використовувати Theanets . Він також побудований на вершині Теано, але набагато простіше працювати. Це може бути правдою, що він не має всіх особливостей Pylearn, але для основної роботи достатньо.
Крім того, це відкритий код, тому ви можете додавати користувацькі мережі під час польоту, якщо ви зважитеся. :)
EDIT: Dec 2015. Нещодавно я почав використовувати Keras . Це трохи нижчий рівень, ніж Theanets, але набагато потужніший. Для основних тестів Theanets підходить. Але якщо ви хочете зробити деякі дослідження в галузі ANN, Керас набагато гнучкіший. Крім того, Keras може використовувати Tensorflow як резервний .
TensorFlow (від Google, випущений 2015-11-09) виглядає багатообіцяючим.
FYI:
Pylearn2, здається, є бібліотекою вибору, проте я вважаю, що їх конфігураційні файли YAML відкладені.
Сам Python був розроблений як легка мова для прототипування, чому б ви не використовували його для визначення самих мережевих властивостей? У нас є чудові редактори з автозавершенням, які б полегшили ваше життя, а Python не схожий на C ++, де вам доведеться чекати, коли завершиться довге створення, перш ніж ви зможете запустити свій код.
Файли YAML, з іншого боку, вам потрібно редагувати за допомогою стандартного текстового редактора без жодної допомоги, і це робить криву навчання ще крутішою.
Можливо, мені не вистачає великої картини, але я все ще не розумію, про що вони думали, я не думаю, що прототипування коду буде набагато повільніше. З цієї причини я розглядаю Theanets або використовую Theano безпосередньо.
Мені подобаються блоки , які також побудовані на вершині Теано. Шлях більш доступний, ніж PyLearn2, і більш багатий на функції, ніж Lasagne. Також акуратно написано.
Оновлено січня 2016 року:
На момент написання письма Керас набрав найбільшу силу. Він надзвичайно модульний і може працювати як на Theano, так і на Tensorflow, надаючи йому великі можливості.
MXNet :
З того, що я чув, Pylearn2 може бути бібліотекою на вибір більшості людей. Це нагадує мені нещодавню публікацію в блозі кілька місяців тому, в якій перераховані всі бібліотеки машинного навчання з коротким поясненням
https://www.cbinsights.com/blog/python-tools-machine-learning
Розділ, який може вас зацікавити тут, буде "Поглиблене навчання". Про Pylearn2, пише він
PyLearn2
На вершині Theano є ще одна бібліотека, що називається PyLearn2, яка приносить модульність і налаштованість Theano, де ви можете створити свою нейронну мережу за допомогою різних файлів конфігурації, щоб було легше експериментувати різні параметри. Можливо, він забезпечує більшу модульність, розділяючи параметри та властивості нейронної мережі на файл конфігурації.
Я написав це повідомлення, де детально описував мої особисті фаворити:
Найкращі бібліотеки машинного навчання в Python
Оскільки згадується понад 30 різних бібліотек, я не публікую їх тут, але це одні з найпопулярніших:
(Вибачте, не можу покластись на репост Github, оскільки моя репліка все ще <10 ...)
Редагувати: Додано посилання на репост про Github.
неон :
Просто додати ще трохи ресурсів. Нещодавно з'явився документ, що вивчає відмінності між декількома пакетами нейронних мереж і глибокими нейронними мережами.
Тут ви можете знайти інформацію . Виглядає, що Факел і TensorFlow - переможці.
Примітка: не всі вони знаходяться в пітоні. Однак я розмістив його, щоб відкрити дискусію.
Microsoft Cognition Toolkit (раніше відомий як CNTK) має API Python . Крім усього іншого, він повинен бути хорошим для мульти GPU :
Приклади та підручники можна знайти на https://github.com/Microsoft/CNTK/tree/master/bindings/python
DyNet: Інструментарій динамічної нейронної мережі. Від {1}:
Ми описуємо DyNet, інструментарій для реалізації моделей нейронної мережі на основі динамічного оголошення мережевої структури. У стратегії статичного оголошення, яка використовується в наборах інструментів, таких як Theano, CNTK і TensorFlow, користувач спочатку визначає графік обчислення (символічне зображення обчислення), а потім приклади подаються в двигун, який виконує це обчислення і обчислює його похідні . У стратегії динамічного декларування DyNet побудова графіків обчислень здебільшого прозора, будується неявно, виконуючи процедурний код, який обчислює мережеві виходи, і користувач може використовувати різні мережеві структури для кожного вводу. Динамічне оголошення таким чином полегшує реалізацію складніших мережевих архітектур, а DyNet розроблений спеціально для того, щоб дозволити користувачам реалізовувати свої моделі таким чином, що є ідіоматичним у бажаній мові програмування (C ++ або Python). Одним із викликів динамічного оголошення є те, що оскільки графік символьних обчислень визначається заново для кожного навчального прикладу, його конструкція повинна мати низькі накладні витрати. Щоб досягти цього, DyNet має оптимізоване подання C ++ та легке представлення графіків. Експерименти показують, що швидкості DyNet швидші або порівнянні з набором інструментів статичного декларування та значно швидші за Chainer, інший інструментарій динамічного декларування. DyNet випускається з відкритим кодом за ліцензією Apache 2.0 та доступний на сайті Одним із викликів динамічного оголошення є те, що оскільки графік символьних обчислень визначається заново для кожного навчального прикладу, його конструкція повинна мати низькі накладні витрати. Щоб досягти цього, DyNet має оптимізоване подання C ++ та легке представлення графіків. Експерименти показують, що швидкості DyNet швидші або порівнянні з набором інструментів статичного декларування та значно швидші за Chainer, інший інструментарій динамічного декларування. DyNet випускається з відкритим кодом за ліцензією Apache 2.0 та доступний на сайті Одним із викликів динамічного оголошення є те, що оскільки графік символьних обчислень визначається заново для кожного навчального прикладу, його конструкція повинна мати низькі накладні витрати. Щоб досягти цього, DyNet має оптимізоване подання C ++ та легке представлення графіків. Експерименти показують, що швидкості DyNet швидші або порівнянні з набором інструментів статичного декларування та значно швидші за Chainer, інший інструментарій динамічного декларування. DyNet випускається з відкритим кодом за ліцензією Apache 2.0 та доступний на сайтіця http URL
Раніше він був відомий як cnn (зв'язок якого пітона отримав назву pycnn).
Список літератури:
Я рекомендую вам використовувати тензорфлоу, який перебуває у сильному розвитку та підтримує глибоке навчання. Ви можете використовувати високорівневі нейронні мережі API Keras , який працює поверх tensorflow і дуже простий у використанні, просто спробувати підручник , і ви будете любити його.
Він отримує велику підтримку завдяки простоті у використанні та схожості з базовим Python.
Він працює "рядок за рядком" (за допомогою динамічних графіків), як звичайний Python, і його можна легко налагодити - навіть використовуючи стандартні заяви про друк. Він також дуже добре інтегрується з NumPy та іншими відомими бібліотеками Python, як Scikit Learn.
Оскільки це робить моделювання легким, воно чудово підходить для прототипування та вивчення нових ідей загалом.
Він підтримує кілька графічних процесорів і робить це дуже просто.
Ознайомтеся з додатковими функціями тут .
Хоча багато переваг, наведених вище, роблять PyTorch набагато приємнішим у використанні, ніж інші бібліотеки, що часто використовуються, варто згадати, що майбутні основні версії Tensorflow за замовчуванням також використовуватимуть динамічне створення графіків (так само нетерплячий режим ). Це зробить його порівнянним із PyTorch у використанні.
Якщо вас цікавлять порівняння продуктивності, Soumith Chintala підтримує набір орієнтирів convnet, які охоплюють декілька згаданих рамок python ( TensorFlow , chainer , neon , Theano ):