Я использую нейронные сети для решения различных задач машинного обучения. Я использую Python и Pybrain, но эта библиотека почти прекращена. Есть ли другие хорошие альтернативы в Python?
Я использую нейронные сети для решения различных задач машинного обучения. Я использую Python и Pybrain, но эта библиотека почти прекращена. Есть ли другие хорошие альтернативы в Python?
Ответы:
ОБНОВЛЕНИЕ: ландшафт немного изменился с тех пор, как я ответил на этот вопрос в июле 14 года, и некоторые новые игроки вышли в космос. В частности, я бы порекомендовал проверить:
У каждого из них есть свои сильные и слабые стороны, так что дайте им всем понять, какой вариант лучше всего подходит для вашего случая использования. Хотя я бы порекомендовал использовать PyLearn2 год назад, сообщество больше не активно, поэтому я бы порекомендовал поискать в другом месте. Мой первоначальный ответ на ответ приведен ниже, но в данный момент он не имеет значения.
PyLearn2 обычно считается библиотекой выбора для нейронных сетей и глубокого обучения на python. Он предназначен для простого научного экспериментирования, а не для простоты использования, поэтому кривая обучения довольно крутая, но если вы не торопитесь и будете следовать учебным пособиям, я думаю, вы будете довольны функциональностью, которую он предоставляет. Предоставляется все: от стандартных многослойных персептронов до ограниченных машин Больцмана, сверточных сетей и автоэнкодеров. Есть отличная поддержка графических процессоров, и все построено на базе Theano, поэтому производительность, как правило, довольно хорошая. Исходный код PyLearn2 доступен на github .
Имейте в виду, что PyLearn2 в настоящий момент имеет противоположную проблему с PyBrain - вместо того, чтобы быть заброшенным, PyLearn2 находится в активной разработке и подвержен частым изменениям.
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). Он имеет много опций, а также может использовать графический процессор.
Pylearn полагается на Theano и, как уже упоминалось в другом ответе, использовать библиотеку довольно сложно, пока вы не овладеете ею.
А пока я бы предложил использовать Theanets . Он также построен на вершине Theano, но с ним гораздо проще работать. Возможно, это правда, что он не обладает всеми функциями Pylearn, но для основной работы этого достаточно.
Также это с открытым исходным кодом, так что вы можете добавлять собственные сети на лету, если вы решитесь. :)
РЕДАКТИРОВАТЬ: декабрь 2015 года. Недавно я начал использовать Keras . Это немного ниже, чем Theanets, но гораздо более мощный. Для базовых тестов подходит Theanets. Но если вы хотите сделать некоторые исследования в области ANN Keras гораздо более гибким. Кроме того, Keras может использовать Tensorflow в качестве бэкэнда.
TensorFlow (от Google, выпущен 2015-11-09) выглядит многообещающе.
FYI:
Pylearn2, кажется, является предпочтительной библиотекой, однако я нахожу их файлы конфигурации YAML неуместными.
Сам Python был разработан, чтобы быть простым языком для прототипирования, почему бы вам не использовать его для определения самих свойств сети? У нас есть отличные редакторы с автозаполнением, которые сделают вашу жизнь намного проще, и Python не похож на C ++, где вам приходится ждать завершения длинных сборок, прежде чем вы сможете запустить свой код.
С другой стороны, файлы YAML нужно редактировать с помощью стандартного текстового редактора без какой-либо помощи, и это делает кривую обучения еще круче.
Возможно, мне не хватает общей картины, но я все еще не понимаю, о чем они думают, я не думаю, что прототипирование в коде будет намного медленнее. По этой причине я рассматриваю Theanets или использую Theano напрямую.
Мне нравятся блоки , которые также построены на вершине Theano. Это более доступно, чем PyLearn2, и более функционально, чем Lasagne. Аккуратно написано тоже.
Обновлено января 2016 года:
На момент написания, Keras на сегодняшний день имеет наибольшую динамику. Он очень модульный и может работать как на Theano, так и на Tensorflow, предоставляя ему большие возможности.
MXNet :
Из того, что я слышал, Pylearn2 может быть библиотекой выбора для большинства людей. Это напоминает мне о недавнем сообщении в блоге несколько месяцев назад, в котором перечислены все различные библиотеки машинного обучения с кратким объяснением
https://www.cbinsights.com/blog/python-tools-machine-learning
Здесь вас может заинтересовать раздел «Глубокое обучение». Про Pylearn2 он пишет
PyLearn2
Существует еще одна библиотека, построенная поверх Theano, под названием PyLearn2, которая обеспечивает модульность и конфигурируемость для Theano, где вы можете создать свою нейронную сеть с помощью различных файлов конфигурации, чтобы было проще экспериментировать с различными параметрами. Возможно, это обеспечивает больше модульности, отделяя параметры и свойства нейронной сети в файл конфигурации.
Я написал этот пост, детализируя некоторые из моих личных фаворитов:
Лучшие библиотеки машинного обучения в Python
Поскольку упомянуто более 30 различных библиотек, я не буду публиковать их все здесь, но они являются одними из самых популярных:
(Извините, я не могу связываться с репозиториями Github, так как мой представитель все еще <10 ...)
Изменить: Добавлены ссылки на репозитории Github.
неон :
Просто чтобы добавить еще ресурсы. Недавно появилась статья, в которой рассматриваются различия между несколькими пакетами нейронных сетей и глубоких нейронных сетей.
Здесь вы можете найти информацию . Похоже, что Torch и TensorFlow являются победителями.
Примечание: не все они в Python. Тем не менее, я разместил его, чтобы открыть обсуждение.
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 (чья привязка к python называлась pycnn).
Рекомендации:
Я рекомендую вам использовать tenorflow, который находится в стадии разработки и поддерживает глубокое изучение. Вы можете использовать высокоуровневые нейронные сети API Keras , который работает поверх tensorflow и очень просто в использовании, просто попробовать учебник , и вы будете любить его.
Он получает большую поддержку благодаря простоте использования и сходству с базовым Python.
Он работает «построчно» (через динамические графики), как обычный Python, и может быть легко отлажен - даже с использованием стандартных операторов печати. Он также очень хорошо интегрируется с NumPy и другими известными библиотеками Python, такими как Scikit Learn.
Поскольку это упрощает моделирование, оно отлично подходит для создания прототипов и изучения новых идей в целом.
Он поддерживает несколько графических процессоров и делает это действительно простым способом.
Проверьте больше возможностей здесь .
Хотя многие из вышеперечисленных преимуществ делают PyTorch гораздо более приятным в использовании, чем другие широко используемые библиотеки, стоит отметить, что в предстоящем основном выпуске Tensorflow по умолчанию также будет использоваться динамическое создание графиков (также известный как режим нетерпеливого режима ). Это сделает его сопоставимым с использованием PyTorch.
Если вы заинтересованы в сравнениях производительности, Soumith Чинтал поддерживает набор convnet тестов , которые охватывают некоторые из уже упомянутых структур питона ( TensorFlow , Chainer , неон , Theano ):