ニューラルネットワークを使用して、さまざまな機械学習の問題を解決しています。Pythonとpybrainを使用していますが、このライブラリはほぼ廃止されています。Pythonには他に良い選択肢がありますか?
ニューラルネットワークを使用して、さまざまな機械学習の問題を解決しています。Pythonとpybrainを使用していますが、このライブラリはほぼ廃止されています。Pythonには他に良い選択肢がありますか?
回答:
更新:14年7月にこの質問に答えて以来、状況はかなり変化しており、一部の新しいプレイヤーがこの分野に参入しています。特に、チェックアウトすることをお勧めします:
それぞれに長所と短所があるため、すべてを試して、ユースケースに最適なものを確認してください。1年前にはPyLearn2を使用することをお勧めしていましたが、コミュニティはもはやアクティブではないため、他の場所を調べることをお勧めします。回答に対する私の元の回答は以下に含まれていますが、この時点ではほとんど無関係です。
PyLearn2は、一般に、Pythonのニューラルネットワークとディープラーニングに最適なライブラリと見なされています。使いやすさよりも簡単な科学的実験のために設計されているため、学習曲線はかなり急ですが、時間をかけてチュートリアルに従うと、提供される機能に満足できると思います。標準の多層パーセプトロンから制限付きボルツマンマシン、畳み込みネット、オートエンコーダーまで、すべてが提供されています。優れたGPUサポートがあり、すべてがTheanoの上に構築されているため、パフォーマンスは通常非常に優れています。PyLearn2のソースはgithubで入手できます。
PyLearn2には現時点ではPyBrainの反対の問題があることに注意してください。放棄されるのではなく、PyLearn2は活発に開発中であり、頻繁に変更される可能性があります。
GoogleのTensor Flow(docs)は、自動差別化を行うもう1つの優れたフレームワークです。私はいくつか書き留めてきたGoogleのテンソルの流れについて簡単な思考を一緒に、彼らは彼らのチュートリアルを持っているMNIST例で、私のブログに。
参照:My Tensorflow XORチュートリアル
Lasagne(docs)は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を利用することもできます。
PylearnはTheanoに依存しており、ライブラリを使用する他の回答で述べたように、それを手に入れるまでは非常に複雑です。
それまでの間、Theanetsを使用することをお勧めします。また、Theanoの上に構築されていますが、操作がはるかに簡単です。Pylearnのすべての機能を備えているわけではないかもしれませんが、基本的な作業には十分です。
また、オープンソースなので、あえてその場でカスタムネットワークを追加できます。:)
編集:2015年12月。最近、Kerasの使用を開始しました。Theanetsよりも少し低いレベルですが、はるかに強力です。基本的なテストには、Theanetsが適切です。しかし、ANN Kerasの分野で調査を行いたい場合は、はるかに柔軟です。さらに、KerasはTensorflowをバックエンドとして使用できます。
TensorFlow(Googleによる、2015-11-09 にリリース)は有望に見えます。
ご参考までに:
Pylearn2が最適なライブラリのようですが、YAML構成ファイルが不快であることがわかりました。
Python自体はプロトタイピング用の簡単な言語として設計されていますが、ネットワークプロパティ自体を定義するためにPythonを使用しないのはなぜですか?オートコンプリート機能を備えたすばらしいエディタがあり、人生をずっと楽にします。Pythonは、コードを実行する前に長いビルドが完了するのを待たなければならないC ++とは異なります。
一方、YAMLファイルは、何の助けもなしに標準のテキストエディターを使用して編集する必要があり、これにより学習曲線がさらに急になります。
私は全体像を見逃しているかもしれませんが、彼らが何を考えていたのかまだ理解できていません。コードのプロトタイピングがずっと遅くなるとは思いません。そのため、Theanetsを検討するか、Theanoを直接使用しています。
私が聞いたことから、Pylearn2は現在、ほとんどの人にとって最適なライブラリかもしれません。これは、数か月前の最近のブログ投稿で、さまざまな機械学習ライブラリをすべて簡単な説明とともにリストしていることを思い出します
https://www.cbinsights.com/blog/python-tools-machine-learning
ここで興味のあるセクションは「ディープラーニング」です。Pylearn2について、彼は書いています
PyLearn2
Theanoの上に構築された別のライブラリPyLearn2があります。これはTheanoにモジュール性と構成可能性をもたらします。おそらく、ニューラルネットワークのパラメーターとプロパティを構成ファイルに分離することにより、よりモジュール性を提供します。
私の個人的なお気に入りのいくつかを詳述したこの投稿を書きました:
30以上の異なるライブラリが言及されているため、ここにすべてを掲載するわけではありませんが、これらは最も人気のあるライブラリの1つです。
(申し訳ありませんが、担当者はまだ<10 ...なのでGithubリポジトリにリンクできません。)
編集:Githubリポジトリへのリンクを追加しました。
ネオン:
さらにリソースを追加します。最近、ニューラルネットワークの複数のパッケージとディープニューラルネットワークの違いを研究した論文がありました。
ここで情報を見つけることができます。これは、ということになりますトーチとTensorFlowが勝者です。
注:それらのすべてがpythonにあるわけではありません。ただし、ディスカッションを開くために投稿しました。
Microsoft Cognition Toolkit(以前のCNTK)には Python APIがあります。とりわけ、マルチGPUに適していると想定されています。
例とチュートリアルは、https://github.com/Microsoft/CNTK/tree/master/bindings/pythonにあります。
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)として知られていました。
参照:
使いやすさと基本的なPythonとの類似性により、多くのサポートを得ています。
通常のPythonと同様に(ダイナミックグラフを介して)「行単位」で実行され、標準のprintステートメントを使用しても簡単にデバッグできます。また、NumPyや、Scikit Learnなどの有名なPythonのライブラリと非常によく統合されます。
モデリングが簡単になるため、一般的に新しいアイデアのプロトタイプを作成して探索するのに最適です。
複数のGPUをサポートし、非常に簡単な方法でサポートしています。
チェックアウトここではより多くの機能を。
上記の利点の多くにより、PyTorchは一般的に使用される他のライブラリよりもはるかに使いやすくなりますが、Tensorflowの今後のメジャーリリースでは、デフォルトで動的グラフ作成(別名eagerモード)も使用されることに注意してください。これにより、PyTorchの使用法に匹敵します。
パフォーマンスの比較に興味がある場合、Soumith Chintalaは、すでに述べたpythonフレームワーク(TensorFlow、chainer、neon、Theano)のいくつかをカバーする一連のconvnetベンチマークを維持しています。