
1ã€ã®ãããžã§ã¯ãã®ãã¬ãŒã ã¯ãŒã¯å
ã§ãããã€ãã®ãªãã·ã§ã³ãèæ
®ããŠããã¥ãŒã©ã«ãããã¯ãŒã¯ã§äœæ¥ããå¿
èŠã«çŽé¢ããŸãããäœããã
PyBrainãæ°ã«å
¥ã
ãŸãã ã å€ãã®äººããã®èª¬æãèªãããšã«èå³ãæã€ããšãé¡ã£ãŠããŸãã
PyBrainã¯ãããŸããŸãªãã¥ãŒã©ã«ãããã¯ãŒã¯é¢é£ã¢ã«ãŽãªãºã ã®åŠç¿ãšå®è£
ã«æé©ãªPythonã©ã€ãã©ãªã®1ã€ã§ãã ããã¯ãã³ã³ãã¯ããªPythonæ§æãšããã·ã³ã€ã³ããªãžã§ã³ã¹ã®åéã®ããŸããŸãªã¢ã«ãŽãªãºã ã®å€§èŠæš¡ãªã»ããã®åªããå®è£
ãçµã¿åãããè¯ãäŸã§ãã
èšèšå¯Ÿè±¡ïŒ
- ç ç©¶è
-ããŸããŸãªã¢ã«ãŽãªãºã ãå®è£
ããããã®çµ±äžãããç°å¢ãæäŸãã倿°ã®ç°ãªãã©ã€ãã©ãªã䜿çšããå¿
èŠæ§ãæé€ããŸãã å®è£
ã®æ©èœã§ã¯ãªããã¢ã«ãŽãªãºã èªäœã«éäžã§ããŸãã
- åŠç -PyBrainã䜿çšãããšã宿é¡ãã³ãŒã¹ãããžã§ã¯ãããŸãã¯èšç®ã®è«æãå®è£
ããã®ã«äŸ¿å©ã§ãã ã¢ãŒããã¯ãã£ã®æè»æ§ã«ãããããŸããŸãªè€éãªæ¹æ³ãæ§é ãããã³ããããžã䟿å©ã«å®è£
ã§ããŸãã
- è¬åž« -åŠç¿æ©æ¢°åŠç¿æè¡ã¯ãã©ã€ãã©ãªãäœæããéã®äž»ãªç®æšã®1ã€ã§ããã èè
ã¯ã圌ãã®ä»äºã®çµæãæèœãªåŠçãšå°éå®¶ã®æºåã«åœ¹ç«ã€ãªãã°ã幞ãã§ãã
- éçºè
ã¯ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãã®ã§ãæ°ããéçºè
ã¯ãã€ã§ã倧æè¿ã§ãã
峿žé€šã«ã€ããŠ
PyBrianã¯ãPythonã§ããŸããŸãªæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãå®è£
ããããã«èšèšãããã¢ãžã¥ãŒã«ã©ã€ãã©ãªã§ãã ãã®äž»ãªç®æšã¯ãç ç©¶è
ã«æè»ã§äœ¿ãããããšåæã«ãæ©æ¢°åŠç¿ããã¹ããããŸããŸãªã¢ã«ãŽãªãºã ã®æå¹æ§ãæ¯èŒããåéã®ã¿ã¹ã¯ãå®çŸããããã®åŒ·åãªããŒã«ãæäŸããããšã§ãã
PyBrainãšããååã¯è±èªã®é åèªã§ããPythonããŒã¹ã®åŒ·ååŠç¿ã人工ç¥èœããã¥ãŒã©ã«ãããã¯ãŒã¯ã©ã€ãã©ãªã§ãã
1ã€ã®ãµã€ãã§è¿°ã¹ãããã«ã
PyBrain-ãã¥ãŒã©ã«ãããã¯ãŒã¯çšã®ã¹ã€ã¹ã¢ãŒããŒãã€ã ïŒPyBrainã¯ããã¥ãŒã©ã«ãããã¯ãŒã¯ã³ã³ãã¥ãŒãã£ã³ã°ã®åéã«ãããã¹ã€ã¹ã¢ãŒããŒãã€ãã§ãïŒã
ã©ã€ãã©ãªã¯ã¢ãžã¥ãŒã«åŒã®åçã«åºã¥ããŠæ§ç¯ãããŠãããããåŠçã¯ããè€éãªã¢ã«ãŽãªãºã ãå®è£
ããå¿
èŠã®ããåºç€ãšç ç©¶è
ã®äž¡æ¹ã«äœ¿çšã§ããŸãã äœ¿çšæé ã®äžè¬çãªæ§é ãæ¬¡ã®å³ã«ç€ºããŸãã

ã©ã€ãã©ãªèªäœã¯ãªãŒãã³ãœãŒã¹è£œåã§ããã1ã€ã®æ³šæäºé
ããããããžã§ã¯ãã§èªç±ã«äœ¿çšã§ããŸããç§åŠç ç©¶ââã«äœ¿çšããå ŽåãåŒçšãããæ
å ±ãœãŒã¹ã®ãªã¹ãã«æ¬¡ã®æ¬ã远å ããããæ±ããããŸãïŒäººã
ãè¡ãïŒïŒ
ãã ã»ã·ã§ãŒã«ããžã£ã¹ãã£ã³ã»ãã€ãšã«ãããŒã³ã»ãŠã£ãŒã¹ãã©ããµã³ã»ã€ãŒãããŒãã£ã³ã»ãã§ã«ããŒããã©ã³ã¯ã»ãŒã³ã±ãããŒãã¹ã»ãªã¥ã¯ã¹ãã£ãŒã¹ããŠã«ã²ã³ã»ã·ã¥ãããããŒããŒã PyBrain æ²èŒå
ïŒJournal of Machine Learning Researchã2010幎ã
äž»ãªæ©èœ
ã©ã€ãã©ãªã®äž»ãªæ©èœïŒããŒãžã§ã³0.3çšïŒã¯æ¬¡ã®ãšããã§ãã
ãããã¯ãŒã¯
PyBrainã¯ãã©ã€ãã©ãªã§ãµããŒããããã»ãšãã©ãã¹ãŠã®è€éãªã¢ã«ãŽãªãºã ãæ§ç¯ããããã«äœ¿çšã§ãããããã¯ãŒã¯æ§é ã§åäœããŸãã äŸã¯æ¬¡ã®ãšããã§ãã
ããŒã«
ããã«ãé¢é£ã¿ã¹ã¯ãå®è£
ã§ãããœãããŠã§ã¢ããŒã«ããããŸãã
- ãã£ãŒãã®äœæ/èŠèŠå
- NetCDFãµããŒã
- XMLã®æžã蟌ã¿/èªã¿åã
ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«
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'>
é衚瀺ã®ã¬ã€ã€ãŒã«ã¯ãååã«ã¬ã€ã€ãŒçªå·ã远å ãããååãä»ããããŸãã
ãããã¯ãŒã¯æ©èœ
ãã¡ãããã»ãšãã©ã®å Žåãäœæããããã¥ãŒã©ã«ãããã¯ãŒã¯ã«ã¯ããã©ã«ã以å€ã®ç¹æ§ãå¿
èŠã§ãã ããã«ã¯ããŸããŸãªå¯èœæ§ããããŸãã ããšãã°ãããã©ã«ãã§ã¯ã
ã·ã°ã¢ã€ãã¢ã¯ãã£ããŒã·ã§ã³é¢æ°ã䜿çšããŠé衚瀺ã¬ã€ã€ãŒãäœæãããå¥ã®ã¿ã€ããæå®ããããã«ã次ã®å®æ°ã䜿çšã§ããŸãã
- ãã€ã¢ã¹ãŠããã
- GaussianLayer
- ãªãã¢ã¬ã€ã€ãŒ
- LSTMLayer
- MDLSTMã¬ã€ã€ãŒ
- ã·ã°ã¢ã€ãå±€
- ãœããããã¯ã¹ã¬ã€ã€ãŒ
- StateDependentLayer
- TanhLayer
>>> 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ãã¡ã€ã«ããããŒã¿ãããŒãããŠãããã¯ãŒã¯ãäœæããäŸã瀺ããŸãã

ããã€ãã®ãªã³ã¯ïŒ
ãããã«
çµè«ãšããŠããã®ã©ã€ãã©ãªã¯éåžžã«è¯ãå°è±¡ãäžããããã䜿çšããã®ã䟿å©ã§ãããã¢ã«ãŽãªãºã ã®èª¬æã¯ã³ã³ãã¯ãã§ãããã³ãŒãã®èéã§ãã®æç¢ºãã倱ããªãããšãèšããããšæããŸãã
PSããã€ãã®çšèªã®ååã«ä¿®æ£ãããå Žåãç§ã¯èããŠæºåãã§ããŠããŸããããã€ãã®ç¿»èš³ã®100ïŒ
ã®æ£ç¢ºãã«ã€ããŠã¯ç¢ºä¿¡ããããŸããããã§ã«ç¢ºç«ãããååããããããããŸããã