신경망을위한 최고의 파이썬 라이브러리


130

신경망을 사용하여 다양한 기계 학습 문제를 해결하고 있습니다. Python과 pybrain을 사용하고 있지만이 라이브러리는 거의 중단되었습니다. 파이썬에는 다른 좋은 대안이 있습니까?



5
그리고 이제 새로운 경쟁자가 있습니다 -Scikit Neuralnetwork : 아직 경험이 없습니까? Pylearn2 또는 Theano와 어떻게 비교됩니까?
Rafael_Espericueta

1
@Emre : Scalable는 고성능과 다릅니다. 일반적으로 이미 같은 유형의 리소스를 더 추가하여 더 큰 문제를 해결할 수 있음을 의미합니다. 사용 가능한 컴퓨터가 100 대인 경우 각 소프트웨어의 소프트웨어 속도가 20 배 느리더라도 확장 성이 여전히 우수합니다. . . (단, 나는 5 대의 기계에 대한 가격을 지불하고 GPU 및 다중 기계 규모의 이점을 모두 가지고 있지만).
Neil Slater

2
따라서 여러 GPU를 사용하십시오 ... 신경망에서 심각한 작업을 위해 CPU를 사용하는 사람은 없습니다. 좋은 GPU를 사용하여 Google 수준의 성능을 얻을 수 있다면 수천 개의 CPU로 무엇을 할 것입니까?
Emre

4
권장 사항과 "최상의"질문이 형식에서 작동하지 않는 이유에 대한 포스터의 예가 되었기 때문에이 질문을 주제 외 주제로 마무리하려고합니다. 답변은 12 개월 후에 실제로 부정확합니다 (PyLearn2는 그 당시 "액티브 개발"에서 "패치 수락"으로 이동했습니다)
Neil Slater

답변:


116

업데이트 : '14 년 7 월 에이 질문에 답한 이후 풍경이 약간 바뀌었고 일부 새로운 플레이어가 그 공간에 들어 왔습니다. 특히 다음을 확인하는 것이 좋습니다.

각각의 장단점이 있으므로 사용 범위에 가장 적합한 것을 확인하십시오. 1 년 전에 PyLearn2를 사용하도록 권장했지만 커뮤니티는 더 이상 활성화되어 있지 않으므로 다른 곳을 보는 것이 좋습니다. 답변에 대한 나의 원래의 답변은 아래에 포함되어 있지만이 시점에서는 크게 관련이 없습니다.


PyLearn2 는 일반적으로 파이썬에서 신경망 및 딥 러닝을 위해 선택된 라이브러리로 간주됩니다. 사용 편의성보다는 쉬운 과학 실험을 위해 설계되었으므로 학습 곡선은 다소 가파르지만 시간을 내고 자습서를 따르면 제공하는 기능에 만족할 것입니다. 표준 다층 퍼셉트론부터 제한된 볼츠만 머신, 컨볼 루션 네트, 오토 인코더까지 모든 것이 제공됩니다. 뛰어난 GPU 지원이 있으며 모든 것이 Theano 위에 구축되어 있으므로 성능이 일반적으로 좋습니다. PyLearn2의 소스는 github에서 사용할 수 있습니다 .

PyLearn2는 현재 PyBrain과 반대되는 문제를 가지고 있습니다. PyLearn2는 포기되지 않고 적극적으로 개발 중이며 자주 변경 될 수 있습니다.


nolearn은 다른 라이브러리를보다 쉽게 ​​사용하고 sklearn과 호환하는 래퍼입니다. 그 자체로는 신경망 라이브러리가 아니지만 그럼에도 불구하고 권장됩니다. 글을 쓰는 시점에서 그것은 주로 Lasagne를위한 것이지만 일부 Caffe 코드와 다른 코드가 있습니다.
Mark

nolearn에 대한 Marks의 의견과 동일한 지 확실하지 않지만 github.com/aigamedev/scikit-neuralnetwork 는 이러한 것들에 대한 래퍼 형태입니다.
onaclov2000


와우, 이것은 2 년이 채 지나지 않아 상당히 구식입니다
Martin Thoma

1
왜 PyTorch를 제외합니까?
Francesco Pegoraro

37

Google의 Tensor Flow ( docs )는 자동 차별화 기능이있는 또 다른 멋진 프레임 워크입니다. 나는 적어 구글 텐서 흐름에 대한 빠른 생각을 함께 그들의 튜토리얼에있는 MNIST 예로, 내 블로그에.

또한보십시오 : 나의 Tensorflow XOR 튜토리얼

Lasagne ( docs )은 theano (→ GPU를 사용할 수 있음)를 사용하고 사용하기 쉽기 때문에 매우 좋습니다. lasagne의 저자는 내가 아는 한 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)로 대부분의 작업을 수행 할 수 있습니다. 많은 옵션이 있으며 GPU를 사용할 수도 있습니다.


22

Pylearn은 Theano에 의존하며 라이브러리 사용에 대한 다른 답변에서 언급했듯이 라이브러리를 사용하기까지는 매우 복잡합니다.

그 동안 Theanets를 사용하는 것이 좋습니다. 합니다. 또한 Theano 위에 구축되었지만 작업하기가 훨씬 쉽습니다. Pylearn의 모든 기능을 갖추고 있지는 않지만 기본 작업으로는 충분합니다.

또한 오픈 소스이므로 감히 사용자 정의 네트워크를 즉시 추가 할 수 있습니다. :)

편집 : 2015 년 12 월. 최근 Keras 사용을 시작했습니다 . Theanets보다 약간 낮지 만 훨씬 강력합니다. 기본 테스트의 경우 Theanets가 적합합니다. 그러나 ANN Keras 분야의 연구를 수행하려는 경우 훨씬 유연합니다. 또한 Keras는 Tensorflow 를 백엔드로 사용할 수 있습니다 .


19

2015 년 11 월 9 일에 출시 된 Google의 TensorFlow 는 유망한 것으로 보입니다.

  • 오픈 소스 (Apache 2.0 라이센스) ( GitHub )
  • Python (C ++의 백엔드)
  • CPU / GPU
  • 자동 차별화
  • 휴대용 (휴대 기기에서도 작동)

여기에 이미지 설명을 입력하십시오

참고 사항 :


3
아아! 당신은 나를 이겼습니다 :) 실제로, TensorFlow는 매우 좋습니다. Theano, Torch 등과 같은 큰 총보다 컴파일 시간이 더 좋습니다
Dawny33

@ Dawny33 "컴파일 시간"이란 무엇입니까? Theano, Torch 및 대부분의 경우 TensorFlow도 해석 방식으로 사용됩니다.
Martin Thoma

@moose Theano에서 최소한 일부 코드는 C ++ 또는 CUDA로 컴파일됩니다.
Franck Dernoncourt

@FranckDernoncourt Ok,하지만 그 시간이 정말로 중요합니까? 약 20 분 동안 교육을 진행하면 CUDA 코드를 생성하는 데 몇 초 밖에 걸리지 않습니까? (어떻게 측정 할 수 있습니까?)
Martin Thoma

2
@moose Theano에서 CUDA / C ++ 코드를 생성하는 데는 적당한 크기의 모델에 약 30 초에서 1 분이 걸립니다. 디버깅이 매우 지루합니다. CUDA / C ++ 코드 생성 시간을 측정하기 위해 Theano 함수가 컴파일되기 전후에 시간을 지정할 수 있습니다.
Franck Dernoncourt

8

Pylearn2가 선택한 라이브러리 인 것처럼 보이지만 YAML 구성 파일이 잘못되었습니다.

파이썬 자체는 프로토 타입 제작을위한 쉬운 언어로 설계되었습니다. 왜 네트워크 속성 자체를 정의하기 위해 사용 하지 않습니까? 우리는 당신의 삶을 훨씬 쉽게 만들어 줄 자동 완성 기능을 갖춘 훌륭한 편집기를 가지고 있으며 Python은 코드를 실행하기 전에 긴 빌드가 완료되기를 기다려야하는 C ++과 다릅니다.

반면에 YAML 파일은 아무 도움없이 표준 텍스트 편집기를 사용하여 편집해야하므로 학습 곡선이 더욱 가파르게됩니다.

큰 그림이 누락되었지만 여전히 그들이 생각하는 것을 이해하지 못합니다. 코드의 프로토 타이핑이 훨씬 느릴 것이라고 생각하지 않습니다. 이러한 이유로 저는 Theanets를 고려하거나 Theano를 직접 사용하고 있습니다.


1
나는 또한 처음에는 YAML 파일에 약간 던져졌지만 이후 구성과 코드의 명확한 분리를 좋아했습니다. 이 옵션에 대해서는 잘 설명되어 있지 않지만 YAML 파일없이 Pylearn2를 사용하도록 선택할 수 있습니다.
매디슨 5 월

간단히 말해서, 나는 단순한 디자인 결정으로 인해 라이브러리를 버리지 않을 것입니다.
매디슨 5 월

매디슨은 구성과 코드 분리에 대한 모든 것을 언급했습니다. 하나의 네트워크를 실행 중이고 모든 매개 변수를 알고 있으면 좋을 것입니다. 구성과 코드를 분할하면 여러 숨겨진 네트워크 등의 여러 네트워크를 실행할 수 있으며 소스 제어가 간단합니다 (코드에 유지 한 경우 어떤 구성을 시도했는지 추적하는 방법).
seanv507

8

나는 Theano 위에 구축 된 Blocks 를 좋아합니다. PyLearn2보다 접근하기 쉽고 Lasagne보다 풍부한 기능이 있습니다. 깔끔하게 작성되었습니다.

2016 년 1 월 업데이트 :

글을 쓰는 시점에서 Keras 는 가장 많은 추진력을 가지고 있습니다. 모듈 식으로 구성되어 있으며 Theano 및 Tensorflow 모두에서 실행할 수있어 큰 기회를 제공합니다.


예, Theano를 이해하는 데 약간의 시간을 투자하고 있다면 현재 pylearn2보다 오늘 블록을 권장합니다.
매디슨 5

훌륭한 사람들이 지은 훌륭한 도서관.
매디슨 5

6

MXNet :

  • C ++로 작성되었지만 Python (및 R, Julia 및 Go와 같은 다른 프로그래밍 언어) API가 있습니다.
  • 자동 병렬 처리로 다중 GPU 및 분산 설정으로 확장합니다.
  • 자동 분화
  • 괜찮은 공연 :

여기에 이미지 설명을 입력하십시오


5

내가 들었던 내용에서 Pylearn2는 현재 대부분의 사람들이 선택한 라이브러리 일 수 있습니다. 이것은 몇 달 전 최근 블로그 게시물을 떠올리며 짧은 설명과 함께 모든 다른 기계 학습 라이브러리를 나열합니다.

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

여기서 관심이있는 섹션은 "딥 학습"입니다. Pylearn2에 대해 그는 다음과 같이 씁니다.

PyLearn2

Theano에는 PyLearn2라는 다른 라이브러리가 내장되어 있습니다.이 라이브러리에는 다양한 구성 파일을 통해 신경망을 생성하여 다양한 매개 변수를 쉽게 실험 할 수있는 Theano에 모듈화 및 구성 기능을 제공합니다. 아마도 신경망의 매개 변수와 속성을 구성 파일로 분리하여 더 많은 모듈성을 제공 할 수 있습니다.


5

나는 나의 개인적인 마음에 드는 것의 일부를 상세하게 설명하는이 포스트를 썼다 :

파이썬 최고의 머신 러닝 라이브러리

30 개가 넘는 다른 라이브러리가 언급되었으므로 여기에 모두 게시하지는 않지만 가장 인기있는 라이브러리 중 하나입니다.

(죄송합니다, 내 담당자는 여전히 <10이므로 Github 저장소에 연결할 수 없습니다 ...)

편집 : Github repos에 대한 링크가 추가되었습니다.


내 의견 아래에 링크를 달 수 있습니까? 답변을 편집하여 답변에 추가하겠습니다
Dawny33

내 대답이 상향 조정되었으므로 이제 필요한 담당자가 있으며 링크를 추가 할 수있었습니다. 그래도 고마워!
srobinson

scikit-learn이 DN 패키지입니까?
SmallChess


4

더 많은 리소스를 추가하십시오. 최근 몇 가지 신경망 패키지와 심층 신경망 패키지의 차이점을 연구하는 논문이있었습니다.

여기에서 정보를 찾을 수 있습니다 . TorchTensorFlow 가 승자 인 것으로 보입니다 .

참고 : 모두 파이썬으로 작성된 것은 아닙니다. 그러나 토론을 시작하기 위해 게시했습니다.



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} Graham Neubig, Chris Dyer, Yoav Goldberg, Austin Matthews, Waleed Ammar, Antonios Anastasopoulos, Miguel Ballesteros, David Chiang, Daniel Clothiaux, Trevor Cohn, Kevin Duh, Manaal Faruqui, Cynthia Gan, Dan Garrette, Yangfeng Ji, Lingpeng Kong Adhiguna Kuncoro, Gaurav Kumar, Chaitanya Malaviya, Paul Michel, Oda Yusuke, Matthew Richardson, Naomi Saphra, Swabha Swayamdipta, Pengcheng Yin. DyNet : 동적 신경망 툴킷. https://arxiv.org/abs/1701.03980

2

강력하게 개발 중이며 딥 러닝을 지원 하는 tensorflow 를 사용하는 것이 좋습니다 . 당신은 높은 수준의 신경 네트워크 API 사용할 수 있습니다 Keras 단지 시도 tensorflow 위에서 실행 아주 간단하게 사용하는 것입니다 튜토리얼을 당신이 그것을 좋아하는 것입니다.


2

파이 토치

기본 Python과의 사용 편의성과 유사성으로 인해 많은 지원을 얻고 있습니다.

일반적인 Python과 마찬가지로 "동적 그래프를 통해"라인별로 실행되며 표준 인쇄 문을 사용하더라도 쉽게 디버깅 할 수 있습니다. 또한 NumPy 및 Scikit Learn과 같은 다른 잘 알려진 Python 라이브러리와 매우 잘 통합됩니다.

모델링이 쉬워 지므로 일반적으로 새로운 아이디어를 프로토 타이핑하고 탐색하는 데 좋습니다.

여러 GPU를 지원하며 정말 쉬운 방법입니다.

더 많은 기능을 여기에서 확인 하십시오 .


위의 많은 이점이 PyTorch를 다른 일반적으로 사용되는 라이브러리보다 사용하기 훨씬 좋게 만들지 만 곧 출시 될 주요 Tensorflow 릴리스는 기본적으로 동적 그래프 생성 ( 열심 한 모드 ) 도 사용한다는 점을 언급 할 가치가 있습니다. 이를 통해 PyTorch와 비교할 수 있습니다.



1

NeuPy 는 인공 신경 네트워크를위한 Python 라이브러리입니다. NeuPy는 간단한 퍼셉트론에서 딥 러닝 모델에 이르기까지 다양한 유형의 신경망을 지원합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.