Лучшая библиотека Python для нейронных сетей

130

Я использую нейронные сети для решения различных задач машинного обучения. Я использую Python и Pybrain, но эта библиотека почти прекращена. Есть ли другие хорошие альтернативы в Python?

marcodena
источник
2
См. Также stackoverflow.com/q/2276933/2359271
Air
5
А теперь появился новый соперник - Scikit Neuralnetwork : кто-нибудь уже имел опыт работы с этим? Как это можно сравнить с Pylearn2 или Theano?
Rafael_Espericueta
1
@Emre: Масштабируемость отличается от высокой производительности. Обычно это означает, что вы можете решить большие проблемы, добавив больше ресурсов того же типа, что у вас уже есть. Масштабируемость по-прежнему выигрывает, когда у вас есть 100 доступных компьютеров, даже если на каждом из них ваше программное обеспечение работает в 20 раз медленнее. , , (хотя я предпочел бы заплатить цену за 5 машин и иметь преимущества как для GPU, так и для нескольких машин).
Нил Слэйтер
2
Так что используйте несколько графических процессоров ... никто не использует процессоры для серьезной работы в нейронных сетях. Если вы можете получить производительность на уровне Google от хорошего или двух графических процессоров, что вы собираетесь делать с тысячей процессоров?
Эмре
4
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что это стало примером того, почему рекомендации и «лучшие» вопросы не работают в формате. Принятый ответ фактически неточен через 12 месяцев (PyLearn2 за это время перешел от «активной разработки» к «принятию исправлений»)
Нил Слейтер

Ответы:

117

ОБНОВЛЕНИЕ: ландшафт немного изменился с тех пор, как я ответил на этот вопрос в июле 14 года, и некоторые новые игроки вышли в космос. В частности, я бы порекомендовал проверить:

У каждого из них есть свои сильные и слабые стороны, так что дайте им всем понять, какой вариант лучше всего подходит для вашего случая использования. Хотя я бы порекомендовал использовать PyLearn2 год назад, сообщество больше не активно, поэтому я бы порекомендовал поискать в другом месте. Мой первоначальный ответ на ответ приведен ниже, но в данный момент он не имеет значения.


PyLearn2 обычно считается библиотекой выбора для нейронных сетей и глубокого обучения на python. Он предназначен для простого научного экспериментирования, а не для простоты использования, поэтому кривая обучения довольно крутая, но если вы не торопитесь и будете следовать учебным пособиям, я думаю, вы будете довольны функциональностью, которую он предоставляет. Предоставляется все: от стандартных многослойных персептронов до ограниченных машин Больцмана, сверточных сетей и автоэнкодеров. Есть отличная поддержка графических процессоров, и все построено на базе Theano, поэтому производительность, как правило, довольно хорошая. Исходный код PyLearn2 доступен на github .

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

Мэдисон Мэй
источник
Обратите внимание, что nolearn - это оболочка, которая делает другие библиотеки проще в использовании и совместима со sklearn. Это не сама библиотека нейронных сетей, но тем не менее рекомендуется. На момент написания статьи это было в основном для лазаньи, но есть некоторые коды Caffe и, возможно, другие.
Марк
Не уверен, что это то же самое, что и комментарий Маркса о nolearn, но github.com/aigamedev/scikit-neuralnetwork также является некоторой формой обертки для множества этих вещей.
onaclov2000
5
К вашему сведению: у Pylearn2 больше нет разработчиков.
Франк Дернонкур
Вау, это довольно устарело менее чем через два года
Мартин Тома
1
Зачем не использовать PyTorch?
Франческо Пегораро
37

Tensor Flow ( docs ) от Google - еще одна приятная структура, которая имеет автоматическое дифференцирование. Я записал несколько быстрых мыслей о Google Tensor Flow в своем блоге вместе с примером MNIST, который они приводят в своем уроке.

Смотрите также: Учебник My Tensorflow XOR

Лазанья ( документы ) очень хороша, так как использует theano (→ вы можете использовать графический процессор) и упрощает его использование. Насколько мне известно, автор лазаньи выиграл испытание в Kaggle Galaxy. Это хорошо с nolearn . Вот пример сети 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. Вы можете сделать большинство вещей с помощью файлов конфигурации (prototxt). Он имеет много опций, а также может использовать графический процессор.

Мартин Тома
источник
22

Pylearn полагается на Theano и, как уже упоминалось в другом ответе, использовать библиотеку довольно сложно, пока вы не овладеете ею.

А пока я бы предложил использовать Theanets . Он также построен на вершине Theano, но с ним гораздо проще работать. Возможно, это правда, что он не обладает всеми функциями Pylearn, но для основной работы этого достаточно.

Также это с открытым исходным кодом, так что вы можете добавлять собственные сети на лету, если вы решитесь. :)

РЕДАКТИРОВАТЬ: декабрь 2015 года. Недавно я начал использовать Keras . Это немного ниже, чем Theanets, но гораздо более мощный. Для базовых тестов подходит Theanets. Но если вы хотите сделать некоторые исследования в области ANN Keras гораздо более гибким. Кроме того, Keras может использовать Tensorflow в качестве бэкэнда.

jnovacho
источник
19

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

  • с открытым исходным кодом (лицензия Apache 2.0) ( GitHub )
  • Python (бэкэнд в C ++)
  • CPU / GPU
  • Авто-Дифференцирование
  • Портативный (даже работает на мобильных устройствах)

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

FYI:

Франк Дернонкур
источник
3
Aargh! Вы победили меня в этом :) Действительно, TensorFlow супер хорош. Имеет лучшее время компиляции, чем большие орудия, такие как Theano, Torch и т. Д.
Dawny33
@ Dawny33 Что значит "время компиляции"? Theano, Torch и, в большинстве случаев, также TensorFlow используются интерпретированным образом.
Мартин Тома
@moose По крайней мере, в Theano некоторый код скомпилирован в C ++ или CUDA.
Франк Дернонкур
@FranckDernoncourt Хорошо, но действительно ли это время имеет значение? Когда тренировка длится около 20 минут, разве это не пара секунд, необходимых для генерации кода CUDA? (Как я могу это измерить?)
Мартин Тома
2
@moose В Theano генерация кода CUDA / C ++ занимает от 30 секунд до одной минуты для модели разумного размера. Это делает отладку довольно утомительной. Чтобы измерить время генерации кода CUDA / C ++, вы можете использовать время до / после компиляции функции Theano.
Франк Дернонкур
8

Pylearn2, кажется, является предпочтительной библиотекой, однако я нахожу их файлы конфигурации YAML неуместными.

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

С другой стороны, файлы YAML нужно редактировать с помощью стандартного текстового редактора без какой-либо помощи, и это делает кривую обучения еще круче.

Возможно, мне не хватает общей картины, но я все еще не понимаю, о чем они думают, я не думаю, что прототипирование в коде будет намного медленнее. По этой причине я рассматриваю Theanets или использую Theano напрямую.

royalstream
источник
1
Поначалу меня тоже немного поразили файлы YAML, но с тех пор я полюбил чистое разделение между конфигурацией и кодом. Вы можете использовать Pylearn2 без файлов YAML, хотя этот параметр недостаточно хорошо документирован.
Мэдисон, май
Короче говоря, я бы не отказался от библиотеки из-за этого простого дизайнерского решения.
Мэдисон, май
Как Мэдисон может упомянуть все о разделении конфигурации и кода. Было бы хорошо, если бы вы работали в одной сети и знали все параметры, но вы не знаете. разделив конфигурацию и код, вы можете запустить несколько сетей - разные скрытые нейроны и т. д., и т. д., и управление исходным кодом становится простым (как вы отслеживаете, какую конфигурацию вы использовали, если сохраняете ее в коде).
seanv507
8

Мне нравятся блоки , которые также построены на вершине Theano. Это более доступно, чем PyLearn2, и более функционально, чем Lasagne. Аккуратно написано тоже.

Обновлено января 2016 года:

На момент написания, Keras на сегодняшний день имеет наибольшую динамику. Он очень модульный и может работать как на Theano, так и на Tensorflow, предоставляя ему большие возможности.

Def_Os
источник
Да, я бы порекомендовал сегодня блоки по сравнению с 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, где вы можете создать свою нейронную сеть с помощью различных файлов конфигурации, чтобы было проще экспериментировать с различными параметрами. Возможно, это обеспечивает больше модульности, отделяя параметры и свойства нейронной сети в файл конфигурации.

user2556
источник
5

Я написал этот пост, детализируя некоторые из моих личных фаворитов:

Лучшие библиотеки машинного обучения в Python

Поскольку упомянуто более 30 различных библиотек, я не буду публиковать их все здесь, но они являются одними из самых популярных:

(Извините, я не могу связываться с репозиториями Github, так как мой представитель все еще <10 ...)

Изменить: Добавлены ссылки на репозитории Github.

srobinson
источник
Можете ли вы прокомментировать ссылку под моим комментарием здесь? Я отредактирую и добавлю его к вашему ответу
Dawny33
Теперь, когда мой ответ был отклонен, у меня теперь есть требуемый представитель, и я смог добавить ссылки. Спасибо хоть!
Сробинсон
Вы уверены, что scikit-learn - это пакет DN?
SmallChess
4

неон :

Франк Дернонкур
источник
4

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

Здесь вы можете найти информацию . Похоже, что Torch и TensorFlow являются победителями.

Примечание: не все они в Python. Тем не менее, я разместил его, чтобы открыть обсуждение.

hoaphumanoid
источник
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 (чья привязка к python называлась pycnn).


Рекомендации:

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

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

Федерико Качча
источник
2

PyTorch

Он получает большую поддержку благодаря простоте использования и сходству с базовым Python.

Он работает «построчно» (через динамические графики), как обычный Python, и может быть легко отлажен - даже с использованием стандартных операторов печати. Он также очень хорошо интегрируется с NumPy и другими известными библиотеками Python, такими как Scikit Learn.

Поскольку это упрощает моделирование, оно отлично подходит для создания прототипов и изучения новых идей в целом.

Он поддерживает несколько графических процессоров и делает это действительно простым способом.

Проверьте больше возможностей здесь .


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

n1k31t4
источник
1

Если вы заинтересованы в сравнениях производительности, Soumith Чинтал поддерживает набор convnet тестов , которые охватывают некоторые из уже упомянутых структур питона ( TensorFlow , Chainer , неон , Theano ):

scttl
источник
это отличный инструмент!
Федерико Качча
1

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

itdxer
источник