ニューラルネットワークに最適なPythonライブラリ


130

ニューラルネットワークを使用して、さまざまな機械学習の問題を解決しています。Pythonとpybrainを使用していますが、このライブラリはほぼ廃止されています。Pythonには他に良い選択肢がありますか?


2
参照してくださいstackoverflow.com/q/2276933/2359271
エア

5
そして今、新しい候補があります-Scikit Neuralnetwork:まだこれを経験した人はいますか?Pylearn2またはTheanoと比較してどうですか?
Rafael_Espericueta

1
@Emre:スケーラブルは高性能とは異なります。通常は、すでに同じタイプのリソースを追加することで、より大きな問題を解決できることを意味します。100台のマシンを使用できる場合、それぞれのマシンでソフトウェアが20倍遅い場合でも、スケーラビリティは依然として優先されます。。。(私はむしろ5台のマシンの代価を払って、GPUとマルチマシンスケールの両方のメリットを享受したいのですが)。
ニールスレーター

2
そのため、複数のGPUを使用します...誰もCPUを使用してニューラルネットワークでの深刻な作業を行いません。優れたGPUから1つまたは2つのGoogleレベルのパフォーマンスを引き出すことができる場合、1000のCPUで何をするつもりですか?
エムレ

4
なぜ推奨事項や「最良の」質問がこの形式で機能しないのかを示すポスターの例になるため、この質問をトピック外として閉じることを投票します。受け入れられた答えは、12か月後に事実上不正確です(その間にPyLearn2は「アクティブな開発」から「パッチの受け入れ」に移行しました)
ニール・スレーター

回答:


117

更新:14年7月にこの質問に答えて以来、状況はかなり変化しており、一部の新しいプレイヤーがこの分野に参入しています。特に、チェックアウトすることをお勧めします:

それぞれに長所と短所があるため、すべてを試して、ユースケースに最適なものを確認してください。1年前にはPyLearn2を使用することをお勧めしていましたが、コミュニティはもはやアクティブではないため、他の場所を調べることをお勧めします。回答に対する私の元の回答は以下に含まれていますが、この時点ではほとんど無関係です。


PyLearn2は、一般に、Pythonのニューラルネットワークとディープラーニングに最適なライブラリと見なされています。使いやすさよりも簡単な科学的実験のために設計されているため、学習曲線はかなり急ですが、時間をかけてチュートリアルに従うと、提供される機能に満足できると思います。標準の多層パーセプトロンから制限付きボルツマンマシン、畳み込みネット、オートエンコーダーまで、すべてが提供されています。優れたGPUサポートがあり、すべてがTheanoの上に構築されているため、パフォーマンスは通常非常に優れています。PyLearn2のソースはgithubで入手できます。

PyLearn2には現時点ではPyBrainの反対の問題があることに注意してください。放棄されるのではなく、PyLearn2は活発に開発中であり、頻繁に変更される可能性があります。


nolearnは、他のライブラリを使いやすく、sklearnと互換性のあるラッパーにすることに注意してください。それ自体はニューラルネットワークライブラリではありませんが、それでもお勧めです。これを書いている時点では、ほとんどがLasagne向けですが、Caffeコードと他のコードもあります。
マーク

nolearnについてのMarksのコメントと同じかどうかはわかりませんが、github.com / aigamedev / scikit-neuralnetworkは、このようなもののラッパーの一種でもあります。
onaclov2000


うわー、これは以下の2年後にはかなり時代遅れです
マーティン・トーマ

1
PyTorchを除外する理由
フランチェスコペ

37

GoogleのTensor Flowdocs)は、自動差別化を行うもう1つの優れたフレームワークです。私はいくつか書き留めてきたGoogleのテンソルの流れについて簡単な思考を一緒に、彼らは彼らのチュートリアルを持っているMNIST例で、私のブログに。

参照:My Tensorflow XORチュートリアル

Lasagnedocs)はtheano(→GPUを使用できます)を使用し、使用をより簡単にするため、非常に優れています。私の知る限り、ラザニアの作者は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

TensorFlow(Googleによる、2015-11-09 にリリース)は有望に見えます。

  • オープンソース(Apache 2.0ライセンス)(GitHub
  • Python(C ++のバックエンド)
  • CPU / GPU
  • 自動識別
  • ポータブル(モバイルデバイスでも動作)

ここに画像の説明を入力してください

ご参考までに:


3
ああ!あなたは私にそれを打ち負かしました:)確かに、TensorFlowは超良いです。Theano、Torchなどのような大砲よりもコンパイルに時間がかかる
Dawny33

@ Dawny33「コンパイル時間」とはどういう意味ですか?Theano、Torch、およびほとんどの場合TensorFlowも解釈された方法で使用されます。
マーティントーマ

@moose少なくともTheanoでは、一部のコードはC ++またはCUDAでコンパイルされます。
フランクダーノンクール

@FranckDernoncourtわかりましたが、その時間は本当に重要ですか?トレーニングを約20分間実行している場合、CUDAコードを生成するのに必要な時間はほんの数秒ではありませんか?(どうすれば測定できますか?)
マーティン・トーマ

2
TheanoでCUDA / C ++コードを生成する@mooseは、適度なサイズのモデルで約30秒から1分かかります。デバッグは非常に面倒です。CUDA / C ++コード生成時間を測定するために、Theano関数がコンパイルされる前/後の時間を測定できます。
フランクダーノンクール

8

Pylearn2が最適なライブラリのようですが、YAML構成ファイルが不快であることがわかりました。

Python自体はプロトタイピング用の簡単な言語として設計されていますが、ネットワークプロパティ自体を定義するためにPythonを使用しないのはなぜですか?オートコンプリート機能を備えたすばらしいエディタがあり、人生をずっと楽にします。Pythonは、コードを実行する前に長いビルドが完了するのを待たなければならないC ++とは異なります。

一方、YAMLファイルは、何の助けもなしに標準のテキストエディターを使用して編集する必要があり、これにより学習曲線がさらに急になります。

私は全体像を見逃しているかもしれませんが、彼らが何を考えていたのかまだ理解できていません。コードのプロトタイピングがずっと遅くなるとは思いません。そのため、Theanetsを検討するか、Theanoを直接使用しています。


1
私も最初はYAMLファイルに少し投げられましたが、それ以来、設定とコードの明確な分離が大好きになりました。YAMLファイルなしでPylearn2を使用することを選択できますが、このオプションは十分に文書化されていません。
マディソン14

要するに、この単純な設計上の決定のために、私はライブラリを破棄しません。
マディソン14

マディソンがそうであるように、構成とコードの分離に関するすべてを述べました。1つのネットワークを実行していて、すべてのパラメーターを知っていれば問題ありませんが、そうではありません。構成とコードを分割することにより、複数のネットワークを実行できます-異なる隠れニューロンなど、ソース管理は簡単です(コード内に保持した場合、どの構成を試行したかを追跡する方法)。
seanv507 14

8

Theanoの上に構築されているBlocksも気に入っています。PyLearn2よりも親しみやすく、Lasagneよりも機能が豊富です。きちんと書かれています。

2016年1月更新:

この記事を書いている時点では、ケラスが最も勢いがあります。高度にモジュール化されており、TheanoとTensorflowの両方で実行できるため、大きなチャンスがあります。


ええ、Theanoを理解するのに少し時間を割いてよければ、現在pylearn2よりもブロックをお勧めします。
マディソン

偉大な人々によって構築された素晴らしいライブラリ。
マディソン

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

私の個人的なお気に入りのいくつかを詳述したこの投稿を書きました:

Pythonで最高の機械学習ライブラリ

30以上の異なるライブラリが言及されているため、ここにすべてを掲載するわけではありませんが、これらは最も人気のあるライブラリの1つです。

(申し訳ありませんが、担当者はまだ<10 ...なのでGithubリポジトリにリンクできません。)

編集:Githubリポジトリへのリンクを追加しました。


ここに私のコメントの下にリンクをコメントできますか?編集して回答に追加します
Dawny33

答えが支持されたので、必要な担当者ができ、リンクを追加できました。でもありがとう!
srobinson

scikit-learnはDNパッケージですか?
-SmallChess

4

ネオン


4

さらにリソースを追加します。最近、ニューラルネットワークの複数のパッケージとディープニューラルネットワークの違いを研究した論文がありました。

ここで情報を見つけることができます。これは、ということになりますトーチTensorFlowが勝者です。

注:それらのすべてがpythonにあるわけではありません。ただし、ディスカッションを開くために投稿しました。



2

DyNet:ダイナミックニューラルネットワークツールキット。{1}から:

ネットワーク構造の動的宣言に基づいてニューラルネットワークモデルを実装するためのツールキットであるDyNetについて説明します。Theano、CNTK、TensorFlowなどのツールキットで使用される静的宣言戦略では、ユーザーは最初に計算グラフ(計算の記号表現)を定義し、次にこの計算を実行し、その派生物を計算するエンジンに例が与えられます。DyNetの動的宣言戦略では、計算グラフの構築はほとんど透過的であり、ネットワーク出力を計算する手続き型コードを実行することで暗黙的に構築され、ユーザーは入力ごとに異なるネットワーク構造を自由に使用できます。したがって、動的宣言により、より複雑なネットワークアーキテクチャの実装が容易になり、DyNetは、ユーザーが好みのプログラミング言語(C ++またはPython)で慣用的な方法でモデルを実装できるように特別に設計されています。動的宣言の課題の1つは、シンボリック計算グラフがすべてのトレーニングの例で新たに定義されるため、その構築には低いオーバーヘッドが必要であることです。これを実現するために、DyNetには最適化されたC ++バックエンドと軽量なグラフ表現があります。実験によると、DyNetの速度は静的宣言ツールキットよりも速いか同等であり、別の動的宣言ツールキットであるChainerよりも大幅に高速です。DyNetは、Apache 2.0ライセンスの下でオープンソースとしてリリースされており、次のWebサイトで入手できます。動的宣言の課題の1つは、シンボリック計算グラフがすべてのトレーニングの例で新たに定義されるため、その構築には低いオーバーヘッドが必要であることです。これを実現するために、DyNetには最適化されたC ++バックエンドと軽量なグラフ表現があります。実験によると、DyNetの速度は静的宣言ツールキットよりも速いか同等であり、別の動的宣言ツールキットであるChainerよりも大幅に高速です。DyNetは、Apache 2.0ライセンスの下でオープンソースとしてリリースされており、次のWebサイトで入手できます。動的宣言の課題の1つは、シンボリック計算グラフがすべてのトレーニングの例で新たに定義されるため、その構築には低いオーバーヘッドが必要であることです。これを実現するために、DyNetには最適化されたC ++バックエンドと軽量なグラフ表現があります。実験によると、DyNetの速度は静的宣言ツールキットよりも速いか同等であり、別の動的宣言ツールキットであるChainerよりも大幅に高速です。DyNetは、Apache 2.0ライセンスの下でオープンソースとしてリリースされており、次のWebサイトで入手できます。このhttp URL

以前はcnn(pythonバインディングの名前はpycnn)として知られていました


参照:

  • {1}グラハム・ノイビグ、クリス・ダイアー、ヨアヴ・ゴールドバーグ、オースティン・マシューズ、ウェリード・アンマー、アントニオ・アナスタソポロス、ミゲル・バレステロス、デヴィッド・チ​​ェン、ダニエル・クロショ、トレバー・コーン、ケヴィン・ドゥ、マナール・ファルキ、シンシア・ガン、ダン・ガレット、ヤンフェン・チー、リンペン・コング、Adhiguna Kuncoro、Gaurav Kumar、Chaitanya Malaviya、Paul Michel、Ouda Yusuke、Matthew Richardson、Naomi Saphra、Swabha Swayamdipta、Pengcheng Yin。DyNet:ダイナミックニューラルネットワークツールキット。https://arxiv.org/abs/1701.03980

2

強力な開発が行われており、ディープラーニングをサポートするテンソルフローを使用することをお勧めします。あなたは、高レベルのニューラルネットワークのAPIを使用することができますKerasだけしてみてください、tensorflowの上で動作し、使用することは非常に単純であるチュートリアルを、あなたはそれを愛ししようとしています。


2

パイトーチ

使いやすさと基本的なPythonとの類似性により、多くのサポートを得ています。

通常のPythonと同様に(ダイナミックグラフを介して)「行単位」で実行され、標準のprintステートメントを使用しても簡単にデバッグできます。また、NumPyや、Scikit Learnなどの有名なPythonのライブラリと非常によく統合されます。

モデリングが簡単になるため、一般的に新しいアイデアのプロトタイプを作成して探索するのに最適です。

複数のGPUをサポートし、非常に簡単な方法でサポートしています。

チェックアウトここではより多くの機能を


上記の利点の多くにより、PyTorchは一般的に使用される他のライブラリよりもはるかに使いやすくなりますが、Tensorflowの今後のメジャーリリースでは、デフォルトで動的グラフ作成(別名eagerモード)も使用されることに注意してください。これにより、PyTorchの使用法に匹敵します。



1

NeuPyは、人工ニューラルネットワーク用のPythonライブラリです。NeuPyは、単純なパーセプトロンから深層学習モデルまで、さまざまな種類のニューラルネットワークをサポートしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.