PyBrainはPythonのニューラルネットワークで動作します



1つのプロジェクトのフレームワーク内で、いくつかのオプションを考慮して、ニューラルネットワークで作業する必要に直面しました。何よりもPyBrainが気に入りました 。 多くの人がその説明を読むことに興味を持つことを願っています。



PyBrainは、さまざまなニューラルネットワーク関連アルゴリズムの学習と実装に最適なPythonライブラリの1つです。 これは、コンパクトなPython構文と、マシンインテリジェンスの分野のさまざまなアルゴリズムの大規模なセットの優れた実装を組み合わせた良い例です。



設計対象:







図書館について



PyBrianは、Pythonでさまざまな機械学習アルゴリズムを実装するために設計されたモジュールライブラリです。 その主な目標は、研究者に柔軟で使いやすいと同時に、機械学習、テスト、さまざまなアルゴリズムの有効性を比較する分野のタスクを実現するための強力なツールを提供することです。

PyBrainという名前は英語の頭字語です。Pythonベースの強化学習、人工知能、ニューラルネットワークライブラリです。

1つのサイトで述べたように、 PyBrain-ニューラルネットワーク用のスイスアーミーナイフ (PyBrainは、ニューラルネットワークコンピューティングの分野におけるスイスアーミーナイフです)。



ライブラリはモジュール式の原理に基づいて構築されているため、学生はより複雑なアルゴリズムを実装する必要のある基礎と研究者の両方に使用できます。 使用手順の一般的な構造を次の図に示します。





ライブラリ自体はオープンソース製品であり、1つの注意事項があるプロジェクトで自由に使用できます。科学研究​​に使用する場合、引用された情報ソースのリストに次の本を追加するよう求められます(人々が行う):

トム・ショール、ジャスティン・バイエル、ダーン・ウィーストラ、サン・イー、マーティン・フェルダー、フランク・ゼンケ、トーマス・リュクスティース、ユルゲン・シュミットフーバー。 PyBrain 掲載先:Journal of Machine Learning Research、2010年。


主な機能



ライブラリの主な機能(バージョン0.3用)は次のとおりです。



ネットワーク



PyBrainは、ライブラリでサポートされるほとんどすべての複雑なアルゴリズムを構築するために使用できるネットワーク構造で動作します。 例は次のとおりです。



ツール



さらに、関連タスクを実装できるソフトウェアツールがあります。



ライブラリのインストール



Pybrainをインストールする前に、作成者は次のライブラリをインストールすることをお勧めします。

Setuptoolsは、新しいライブラリのインストールを大幅に簡素化するPython用のパッケージマネージャーです。 それをインストールするには、 このスクリプトをダウンロードして実行することをお勧めします(python ez_setup.py)。

インストール後、コマンドを使用する機会があります
easy_install
      
      



新しいライブラリをインストールします。

すぐにそれらを使用し、2つの必要なパッケージをインストールします。

 $ easy_install scipy $ easy_install matplotlib
      
      





次に、PyBrain自体がインストールされます。






ライブラリの基本



ニューラルネットワーク


2つの入力、3つの隠れ層、1つの出力を持つニューラルネットワークの作成:

 >>> from pybrain.tools.shortcuts import buildNetwork >>> net = buildNetwork(2, 3, 1)
      
      





その結果、重みのランダムな値で初期化された作成されたニューラル回路は、ネットオブジェクトに配置されます。



アクティベーション機能


アクティベーション関数は次のように定義されます。

 net.activate([2, 1])
      
      





ネットワークに送信される要素の数は、入力の数と等しくなければなりません。 このメソッドは、現在の回路に1つの出力がある場合は特異な答えを返し、出力が多い場合は配列を返します。



ネットワーク情報の取得


現在のネットワーク構造に関する情報を取得するために、その各要素には名前があります。 この名前は、自動的に指定することも、ネットワークを作成するときに他の基準で指定することもできます。

たとえば、ネットの場合、名前は自動的に与えられます:

 >>> net['in'] <LinearLayer 'in'> >>> net['hidden0'] <SigmoidLayer 'hidden0'> >>> net['out'] <LinearLayer 'out'>
      
      





非表示のレイヤーには、名前にレイヤー番号が追加された名前が付けられます。



ネットワーク機能


もちろん、ほとんどの場合、作成されたニューラルネットワークにはデフォルト以外の特性が必要です。 これにはさまざまな可能性があります。 たとえば、デフォルトでは、 シグモイドアクティベーション関数を使用して非表示レイヤーが作成され、別のタイプを指定するために、次の定数を使用できます。



 >>> from pybrain.structure import TanhLayer >>> net = buildNetwork(2, 3, 1, hiddenclass=<b>TanhLayer</b>) >>> net['hidden0'] <TanhLayer 'hidden0'>
      
      







出力層のタイプを指定することもできます。

 >>> from pybrain.structure import SoftmaxLayer >>> net = buildNetwork(2, 3, 2, hiddenclass=TanhLayer, outclass=SoftmaxLayer) >>> net.activate((2, 3)) array([ 0.6656323, 0.3343677])
      
      





さらに、バイアスを使用できます。

 >>> net = buildNetwork(2, 3, 1, bias=True) >>> net['bias'] <BiasUnit 'bias'>
      
      







データ処理(DataSetの構築)


作成されたネットワークは、このセクションが作業専用のデータを処理する必要があります。 典型的なデータセットは、入力値と出力値のセットです。 それらを操作するために、PyBrainはpybrain.datasetモジュールを使用し、SupervisedDataSetクラスも後で使用されます。



データ設定


SupervisedDataSetクラスは、一般的な教師のトレーニングに使用されます。 出力と出力の配列をサポートします。 それらのサイズは、クラスのインスタンスを作成するときに設定されます。

レコードビュー:

 >>> from pybrain.datasets import SupervisedDataSet >>> ds = SupervisedDataSet(2, 1)
      
      





は、2次元の入力データと1次元の出力を格納するデータ構造が作成されていることを意味します。



サンプルを追加する


ニューラルネットワークのトレーニングにおける古典的なタスクは、XOR関数を学習することです。次に、そのようなネットワークの作成に使用されるデータセットを示します。

 >>> ds.addSample((0, 0), (0,)) >>> ds.addSample((0, 1), (1,)) >>> ds.addSample((1, 0), (1,)) >>> ds.addSample((1, 1), (0,))
      
      







サンプル構造の研究


現在のセットでデータ配列を取得するために、配列を操作するために標準のPython関数を使用することができます。

 >>> len(ds)
      
      





これは要素の数であるため、4を出力します。

セットの反復は、配列の通常の方法で編成することもできます。

 >>> for inpt, target in ds: print inpt, target
      
      





 ... [ 0. 0.] [ 0.] [ 0. 1.] [ 1.] [ 1. 0.] [ 1.] [ 1. 1.] [ 0.]
      
      





また、フィールドの各セットには、その名前を使用して直接アクセスできます。

 >>> ds['input']
      
      





 array([[ 0., 0.], [ 0., 1.], [ 1., 0.], [ 1., 1.]])
      
      







 >>> ds['target']
      
      





 array([[ 0.], [ 1.], [ 1.], [ 0.]])
      
      







サンプルを完全に削除して、サンプルが占有しているメモリを手動で解放することもできます。

 >>> ds.clear() >>> ds['input']
      
      





 array([], shape=(0, 2), dtype=float64)
      
      





 >>> ds['target']
      
      





 array([], shape=(0, 1), dtype=float64)
      
      







サンプルのネットワークトレーニング


PyBrainはトレーナーの概念を使用して、教師とネットワークを訓練します。 トレーナーは、ネットワークのインスタンスとサンプルのセットのインスタンスを受け取り、結果セットでネットワークをトレーニングします。

典型的な例は逆伝播です。 このアプローチの実装を簡素化するために、PyBrainにはBackpropTrainerクラスがあります。

 >>> from pybrain.supervised.trainers import BackpropTrainer
      
      





サンプルのトレーニングセット(ds)とターゲットネットワーク(ネット)は、上記の例で既に作成されていますが、これらは結合されます。

 >>> net = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer) >>> trainer = BackpropTrainer(net, ds)
      
      





トレーナーはネットワーク構造へのリンクを受け取り、それをトレーニングできます。

 >>> trainer.train()
      
      





 0.31516384514375834
      
      





train()メソッドを呼び出すと、トレーニングの1回の反復(時代)が実行され、2次誤差の値(誤差に2倍の比例)が返されます。

各時代のサイクルを整理する必要がない場合は、収束するためのトレーニングネットワークメソッドがあります。

 >>> trainer.trainUntilConvergence()
      
      





このメソッドは、各時代のエラーの配列を返します。



さまざまなネットワークの実装のその他の例



記事で
トム・ショール、マーティン・フェルダー他 PyBrain、Journal of Machine Learning Research 11(2010)743-746。
.matファイルからデータをロードしてネットワークを作成する例を示します。



 # Load Data Set. ds = SequentialDataSet.loadFromFile('parity.mat') # Build a recurrent Network. net = buildNetwork(1, 2, 1, bias=True, hiddenclass=TanhLayer, outclass=TanhLayer, recurrent=True) recCon = FullConnection(net['out'], net['hidden0']) net.addRecurrentConnection(recCon) net.sortModules() # Create a trainer for backprop and train the net. trainer = BackpropTrainer(net, ds, learningrate=0.05) trainer.trainEpochs(1000)
      
      







いくつかのリンク:







おわりに



結論として、このライブラリは非常に良い印象を与え、それを使用するのが便利であり、アルゴリズムの説明はコンパクトですが、コードの荒野でその明確さを失わないことを言いたいと思います。



PSいくつかの用語の名前に修正がある場合、私は聞いて準備ができています、いくつかの翻訳の100%の正確さについては確信がありません、すでに確立された名前があるかもしれません。



All Articles