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の正確さに぀いおは確信がありたせん、すでに確立された名前があるかもしれたせん。

Source: https://habr.com/ru/post/J148407/


All Articles