Найкраща бібліотека пітонів для нейронних мереж


130

Я використовую нейронні мережі для вирішення різних проблем машинного навчання. Я використовую Python та pybrain, але ця бібліотека майже припинена. Чи є інші хороші альтернативи в Python?


2
Дивіться також stackoverflow.com/q/2276933/2359271
повітря

5
А тепер з'явився новий претендент - Scikit Neuralnetwork : Хтось із цим ще мав досвід? Як вона порівнюється з Pylearn2 або Theano?
Rafael_Espericueta

1
@Emre: масштабованість відрізняється високою продуктивністю. Зазвичай це означає, що ви можете вирішити більші проблеми, додавши більше ресурсів того ж типу, які ви вже маєте. Масштабування все-таки виграє, якщо у вас є 100 машин, навіть якщо ваше програмне забезпечення в 20 разів повільніше на кожному з них. . . (хоча я вважаю за краще заплатити ціну за 5 машин і мати переваги як для графічного, так і для багатомашинного масштабу).
Ніл Слейтер

2
Тому використовуйте кілька графічних процесорів ... ніхто не використовує процесори для серйозної роботи в нейронних мережах. Якщо ви можете отримати продуктивність на рівні Google з хорошого GPU або двох, то що ви збираєтеся робити з тисячею процесорів?
Емре

4
Я голосую за те, щоб закрити це питання поза темою, оскільки це стало прикладом плаката, чому рекомендації та "найкращі" питання не працюють у форматі. Прийнята відповідь фактично неточна через 12 місяців (PyLearn2 за цей час пройшов шлях від "активного розвитку" до "прийняття патчів")
Ніл Слейтер

Відповіді:


116

ОНОВЛЕННЯ: ландшафт змінився досить сильно, оскільки я відповів на це запитання у липні 14 року, і деякі нові гравці вийшли на місце. Зокрема, я рекомендую перевірити:

Кожен з них має свої сильні та слабкі сторони, тож дайте їм усе зрозуміти, що найкраще відповідає вашому використанню. Хоча я б рекомендував використовувати PyLearn2 рік тому, спільнота більше не активна, тому я б рекомендував шукати в іншому місці. Моя оригінальна відповідь на відповідь наведена нижче, але в цьому питанні в основному не має значення.


PyLearn2, як правило, вважається бібліотекою вибору для нейронних мереж та глибокого вивчення пітона. Він розроблений для легкого наукового експерименту, а не простоти використання, тому крива навчання досить крута, але якщо ви витратите свій час і дотримуєтесь навчальних посібників, я думаю, ви будете задоволені функціоналом, який він надає. Пропонується все, від стандартних багатошарових перцептонів до обмежених машин Больцмана до згорткових мереж до автокодер. Є чудова підтримка GPU, і все побудовано на вершині Theano, тому продуктивність, як правило, досить хороша. Джерело для PyLearn2 доступне на github .

Майте на увазі, що PyLearn2 наразі має протилежну проблему PyBrain - замість того, щоб бути покинутим, PyLearn2 знаходиться в активному розвитку і зазнає частих змін.


Зауважте, що nolearn - це обгортка, яка робить інші бібліотеки простішими у використанні та сумісністю зі sklearn. Це сама по собі бібліотека нейронних мереж, але, тим не менш, рекомендується. На час написання це в основному для Лазаньї, але є якийсь код Caffe і, можливо, інші.
Марк

Не впевнений, чи це те саме, що Маркс коментує nolearn, але github.com/aigamedev/scikit-neuralnetwork - це також якась форма обгортки для купки цього матеріалу.
onaclov2000


Вау, це досить застаріло після менш ніж двох років
Мартін Тома

1
Навіщо залишати PyTorch?
Франческо Пегораро

37

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. Більшість речей можна робити за допомогою файлів конфігурації (прототексту). У ньому багато варіантів, а також можна використовувати графічний процесор.


22

Пілеарн покладається на Теано, і як уже згадувалося в іншій відповіді, користуватися бібліотекою досить складно, доки ви не отримаєте її.

Тим часом я б запропонував використовувати Theanets . Він також побудований на вершині Теано, але набагато простіше працювати. Це може бути правдою, що він не має всіх особливостей Pylearn, але для основної роботи достатньо.

Крім того, це відкритий код, тому ви можете додавати користувацькі мережі під час польоту, якщо ви зважитеся. :)

EDIT: Dec 2015. Нещодавно я почав використовувати Keras . Це трохи нижчий рівень, ніж Theanets, але набагато потужніший. Для основних тестів Theanets підходить. Але якщо ви хочете зробити деякі дослідження в галузі ANN, Керас набагато гнучкіший. Крім того, Keras може використовувати Tensorflow як резервний .


19

TensorFlow (від Google, випущений 2015-11-09) виглядає багатообіцяючим.

  • з відкритим кодом (ліцензія Apache 2.0) ( GitHub )
  • Python (бекенд в C ++)
  • CPU / GPU
  • Автодиференціація
  • Портативний (працює навіть на мобільних пристроях)

введіть тут опис зображення

FYI:


3
Аарх! Ти мене до цього побив :) Дійсно, TensorFlow - це супер добре. Має кращий час для збирання, ніж великі гармати, такі як Теано, Факел тощо
Dawny33

@ Dawny33 Що ви маєте на увазі під "часом компіляції"? Theano, Torch та більшість часу також TensorFlow використовуються інтерпретовано.
Мартін Тома

@moose У Theano, принаймні, деякий код компілюється в C ++ або CUDA.
Франк Дернонкурт

@FranckDernoncourt Добре, але чи справді це час має значення? Коли ви тренуєтесь близько 20 хвилин, чи не потрібно лише пару секунд часу, необхідного для створення коду CUDA? (Як я можу це виміряти?)
Мартін Тома

2
@moose In Theano для створення коду CUDA / C ++ займає від 30 секунд до однієї хвилини для моделі досить розміру. Це робить налагодження досить стомлюючим. Для вимірювання часу генерації коду CUDA / C ++ можна провести час до / після компіляції функції Theano.
Франк Дернонкурт

8

Pylearn2, здається, є бібліотекою вибору, проте я вважаю, що їх конфігураційні файли YAML відкладені.

Сам Python був розроблений як легка мова для прототипування, чому б ви не використовували його для визначення самих мережевих властивостей? У нас є чудові редактори з автозавершенням, які б полегшили ваше життя, а Python не схожий на C ++, де вам доведеться чекати, коли завершиться довге створення, перш ніж ви зможете запустити свій код.

Файли YAML, з іншого боку, вам потрібно редагувати за допомогою стандартного текстового редактора без жодної допомоги, і це робить криву навчання ще крутішою.

Можливо, мені не вистачає великої картини, але я все ще не розумію, про що вони думали, я не думаю, що прототипування коду буде набагато повільніше. З цієї причини я розглядаю Theanets або використовую Theano безпосередньо.


1
Спочатку мене також трохи кинули файли YAML, але з тих пір я полюбив чисте розділення між конфігурацією та кодом. Ви можете використовувати Pylearn2 без файлів YAML, хоча ця опція недостатньо задокументована.
Медісон

Коротше кажучи, я б не відкидав бібліотеку через таке просте дизайнерське рішення.
Медісон, травень

Як Медісон, можливо, згадав все про розділення конфігурації та коду. Було б добре, якби ви працювали в одній мережі і знали всі параметри, але ви цього не робите. розділивши конфігурацію та код, ви можете запустити декілька мереж - різні приховані нейрони тощо, і т.д.
seanv507

8

Мені подобаються блоки , які також побудовані на вершині Теано. Шлях більш доступний, ніж PyLearn2, і більш багатий на функції, ніж Lasagne. Також акуратно написано.

Оновлено січня 2016 року:

На момент написання письма Керас набрав найбільшу силу. Він надзвичайно модульний і може працювати як на Theano, так і на Tensorflow, надаючи йому великі можливості.


Так, я б сьогодні рекомендував блоки над pylearn2, якщо ви добре вкладете трохи часу, щоб зрозуміти Theano.
Медісон

Чудова бібліотека, побудована великими людьми.
Медісон

6

MXNet :

  • написано на C ++, але має API на Python (та кілька інших мов програмування, таких як R, Julia та Go)
  • Масштабує до декількох графічних процесорів та розподілених налаштувань з автоматичним паралелізмом.
  • Автоматична диференціація
  • Гідні виступи:

введіть тут опис зображення


5

З того, що я чув, Pylearn2 може бути бібліотекою на вибір більшості людей. Це нагадує мені нещодавню публікацію в блозі кілька місяців тому, в якій перераховані всі бібліотеки машинного навчання з коротким поясненням

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

Розділ, який може вас зацікавити тут, буде "Поглиблене навчання". Про Pylearn2, пише він

PyLearn2

На вершині Theano є ще одна бібліотека, що називається PyLearn2, яка приносить модульність і налаштованість Theano, де ви можете створити свою нейронну мережу за допомогою різних файлів конфігурації, щоб було легше експериментувати різні параметри. Можливо, він забезпечує більшу модульність, розділяючи параметри та властивості нейронної мережі на файл конфігурації.


5

Я написав це повідомлення, де детально описував мої особисті фаворити:

Найкращі бібліотеки машинного навчання в Python

Оскільки згадується понад 30 різних бібліотек, я не публікую їх тут, але це одні з найпопулярніших:

(Вибачте, не можу покластись на репост Github, оскільки моя репліка все ще <10 ...)

Редагувати: Додано посилання на репост про Github.


Чи можете ви прокоментувати посилання під моїм коментарем тут? Я відредагую та додаю його до вашої відповіді
Dawny33

Тепер, коли моя відповідь була схвалена, я отримав потрібний представник і зміг додати посилання. Дякую, хоча!
srobinson

Ви впевнені, що scikit-learn - це пакет DN?
SmallChess

4

неон :


4

Просто додати ще трохи ресурсів. Нещодавно з'явився документ, що вивчає відмінності між декількома пакетами нейронних мереж і глибокими нейронними мережами.

Тут ви можете знайти інформацію . Виглядає, що Факел і TensorFlow - переможці.

Примітка: не всі вони знаходяться в пітоні. Однак я розмістив його, щоб відкрити дискусію.



2

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).


Список літератури:

  • {1} Грем Нойбіг, Кріс Дайер, Йоав Голдберг, Остін Меттьюз, Уелід Аммар, Антоніос Анастасопулос, Мігель Баллестерос, Девід Чіанг, Даніель Клотьо, Тревор Кон, Кевін Дух, Манаал Фарукі, Сінтія Ган, Дан Гарретт, Янфенг Чжі, Лінг , Адхігуна Кункоро, Гаурав Кумар, Чайтанія Малавія, Пол Мішель, Юсуке Ода, Метью Річардсон, Наомі Сафра, Свабха Сваямдіпта, Пенчжен Інь. DyNet: Інструментарій динамічної нейронної мережі. https://arxiv.org/abs/1701.03980

2

Я рекомендую вам використовувати тензорфлоу, який перебуває у сильному розвитку та підтримує глибоке навчання. Ви можете використовувати високорівневі нейронні мережі API Keras , який працює поверх tensorflow і дуже простий у використанні, просто спробувати підручник , і ви будете любити його.


2

PyTorch

Він отримує велику підтримку завдяки простоті у використанні та схожості з базовим Python.

Він працює "рядок за рядком" (за допомогою динамічних графіків), як звичайний Python, і його можна легко налагодити - навіть використовуючи стандартні заяви про друк. Він також дуже добре інтегрується з NumPy та іншими відомими бібліотеками Python, як Scikit Learn.

Оскільки це робить моделювання легким, воно чудово підходить для прототипування та вивчення нових ідей загалом.

Він підтримує кілька графічних процесорів і робить це дуже просто.

Ознайомтеся з додатковими функціями тут .


Хоча багато переваг, наведених вище, роблять PyTorch набагато приємнішим у використанні, ніж інші бібліотеки, що часто використовуються, варто згадати, що майбутні основні версії Tensorflow за замовчуванням також використовуватимуть динамічне створення графіків (так само нетерплячий режим ). Це зробить його порівнянним із PyTorch у використанні.



1

NeuPy - бібліотека Python для штучних нейронних мереж. NeuPy підтримує багато різних типів нейронних мереж від простого перцептрона до моделей глибокого навчання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.