python3へのPyBrainライブラリの移植についての話をしたいと思います。これは最近ハブで説明されました
カットの下の詳細。
pythonを習い始めたばかりで、 ニューラルネットワークにも興味があるので、ライブラリの機能に非常に興味を持ちました。
ロードして設定するのは便利でしたが、それは不運です! Pybrainはpython3をサポートしておらず、4か月間は更新されていません。
悲しい考えで、デビッド・ビーズリーによる本「Python:A Complete Reference」を開き、読書に飛び込んだ。
python3パッケージには2to3ユーティリティがあります。
githubでpybrainプロジェクトを分岐し 、彼女を拷問し始めました。
最初に、 2to3の助けを借りて、彼はpybrainフォルダーを悪用し、次にフォルダーを例のサンプルと共に悪用しました。
奇妙なことに、すべてがほとんど痛みを伴わずに行われ、チームは簡単に不名誉になりました(記事の最後にある「2to3オプションのクイックリファレンス」を参照してください)。
2to3 -Wn -o pybrain3/ pybrain/ 2to3 -Wn -o examples3/ examples/
この場合、コードをその場で編集したくありませんでしたが、ユーティリティが既に移植されたソーステキストを保存する2つの追加フォルダー(examples3とpybrain3)を作成しました。
ライブラリのバグをテストする
ライブラリのパフォーマンスをテストするために、テストに付属のサンプルを使用することにしました。
最初の起動時に、次のようなエラーが発生しました。
Traceback (most recent call last): File "test1.py", line 2, in <module> from pybrain.tools.shortcuts import buildNetwork File "/usr/lib/python3.2/site-packages/PyBrain-0.3.1-py3.2.egg/pybrain/__init__.py", line 1, in <module> from .structure.__init__ import * File "/usr/lib/python3.2/site-packages/PyBrain-0.3.1-py3.2.egg/pybrain/structure/__init__.py", line 1, in <module> from .connections.__init__ import * File "/usr/lib/python3.2/site-packages/PyBrain-0.3.1-py3.2.egg/pybrain/structure/connections/__init__.py", line 1, in <module> from .full import FullConnection File "/usr/lib/python3.2/site-packages/PyBrain-0.3.1-py3.2.egg/pybrain/structure/connections/full.py", line 5, in <module> from .connection import Connection File "/usr/lib/python3.2/site-packages/PyBrain-0.3.1-py3.2.egg/pybrain/structure/connections/connection.py", line 3, in <module> from pybrain.utilities import abstractMethod, Named File "/usr/lib/python3.2/site-packages/PyBrain-0.3.1-py3.2.egg/pybrain/utilities.py", line 15, in <module> from string import split ImportError: cannot import name split
ファイルを操作する必要がありました。 誤ったインポートについてコメントし、いくつかの関数名を修正しました...一般的に、初心者でも特に複雑なことはありません。
いくつかの例で、 matplotlibとpylabモジュールが不足しているため、操作不能に遭遇しました。
AUR'e(ArchLinuxを持っています)でpython-matplotlib-gitパッケージを見つけてインストールしました。 幸いなことに、既にpython3に移植されていますが、サポートされているパッケージのリストには含まれていません。 他のシステムでは、おそらくモジュールを手動でインストールする必要があります。 ここで取ってください 。
私は特にpylabを理解していませんでした。 それはscipyの一部です。 配信されたコミュニティ/ python-scipyバージョン0.10-サンプルの別の部分が機能しました。
matplotlibを介してこれらの美しいグラフィックを表示する例からいくつかの写真を提供します。
コンソールに出力する他の例のダンプは提供しません-たくさんの数字で、特に興味深いものはありません。
おわりに
したがって、わずか数時間で、最小限の労力でライブラリを十分に機能する状態に移植することができました。 ありがとう2to3
ライブラリは機能しているようですが、次のとおりです。
- python3のすべての例を実行できませんでした 。
- 一部の例はランダム性を使用して機能するため、結果をpython2の結果と比較することはできません。
- さまざまな部品とpybrainモジュールのテストが依然として必要です 。
理想的には、ライブラリを完全にカバーするテストスイートを作成します。 python2とpython3でテストを実行し、結果を比較します。 そうして初めて、ポートが正しいと結論付けることができます。
アドバイス、提案、推奨事項があれば嬉しいです!
誰かが手助けする準備ができている場合-書き込み、私はうれしいです!
PS。 githubのメインpybrainブランチへのプルリクエストはまだ行われていません。 私もそれをひねり、あまり明らかでないバグを探したい。 それまでの間、移植されたpybrainライブラリはこちらにあります 。
参照:
- 「Pythonでニューラルネットワークを操作するPyBrain」
- パイブレイン
- David Beasley、Python:The Complete Reference、第4版
作業例のリスト
- 例/最適化/ *
- 例/監視あり/ backprop / *
- 例/監視対象/エボリーノ/ *
- 例/ rl /環境/迷路/ *
- 例/ rl /環境/船乗り/ *
- 例/ rl / valuebased / *
- 例/監視なし/ kohonen.py
- 例/監視なし/ rbm.py
壊れた例のリスト
- 例/ rl /環境/ capturegame /
- 例/ rl /環境/ cartpole / play_cartpole.py
- 例/ rl /環境/ flexcube /
- 例/ rl /環境/ ode-怠inessはODE + pyodeを置くことでした
- 例/監視なし/ gp.py
- examples / unsupervised / lsh.py-チェックすると、weaveモジュールのscipyライブラリでエラーをキャッチしました。 私はまだ勉強していません。 たぶん、バグレポートを書きます。 それだけをより詳しく研究する必要があります。
2to3オプションのクイックリファレンス
Usage: 2to3 [options] file|dir ... : -h, --help -d, --doctests_only doctests -f FIX, --fix=FIX FIX ; : all -j PROCESSES, --processes=PROCESSES 2to3 PROCESSES -x NOFIX, --nofix=NOFIX NOFIX -l, --list-fixes -p, --print-function Modify the grammar so that print() is a function -v, --verbose --no-diffs -w, --write -n, --nobackups -o OUTPUT_DIR, --output-dir=OUTPUT_DIR . -n. -W, --write-unchanged-files . ( --output-dir); -w. --add-suffix=ADD_SUFFIX . -n, . : --add-suffix='3' .py3