Pybrain-quick-guide
PyBrain-概要
Pybrainは、Pythonを使用して実装された機械学習用のオープンソースライブラリです。 このライブラリは、ネットワーク、データセット、トレーナー向けの使いやすいトレーニングアルゴリズムを提供し、ネットワークをトレーニングおよびテストします。
公式文書で述べられているPybrainの定義は次のとおりです-
PyBrainは、Python用のモジュール式機械学習ライブラリです。 その目標は、機械学習タスク用の柔軟で使いやすいまだ強力なアルゴリズムと、アルゴリズムをテストおよび比較するためのさまざまな定義済み環境を提供することです。
PyBrainは、Pythonベースの強化学習、人工知能、ニューラルネットワークライブラリの略です。 実際、最初に名前を思いついた後、この非常に記述的な「Backronym」をリバースエンジニアリングしました。
Pybrainの特徴
以下はPybrainの特徴です-
ネットワーク
ネットワークはモジュールで構成され、接続を使用して接続されます。 Pybrainは、フィードフォワードネットワーク、リカレントネットワークなどのニューラルネットワークをサポートしています。
- フィードフォワードネットワーク*は、ノード間の情報が順方向に移動し、決して逆方向に移動しないニューラルネットワークです。 フィードフォワードネットワークは、人工ニューラルネットワークで利用可能なネットワークの中で最初で最も単純なネットワークです。
情報は、入力ノードから、非表示ノードの隣に、さらに出力ノードに渡されます。
- リカレントネットワーク*は、フィードフォワードネットワークに似ています。唯一の違いは、各ステップでデータを記憶する必要があることです。 各ステップの履歴を保存する必要があります。
データセット
データセットは、ネットワーク上でテスト、検証、トレーニングするために提供されるデータです。 使用するデータセットのタイプは、機械学習で実行するタスクによって異なります。 Pybrainがサポートする最も一般的に使用されるデータセットは、 SupervisedDataSet および ClassificationDataSet です。
トレーナー
ネットワーク、つまりニューラルネットワークを作成すると、与えられたトレーニングデータに基づいてトレーニングされます。 ネットワークが適切にトレーニングされているかどうかは、そのネットワークでテストされたテストデータの予測に依存します。 Pybrain Trainingで最も重要な概念は、BackpropTrainerとTrainUntilConvergenceの使用です。
道具
Pybrainは、パッケージをインポートしてネットワークを構築するのに役立つツールモジュールを提供しています: pybrain.tools.shortcuts.buildNetwork
可視化
pybrainを使用してテストデータを視覚化することはできません。 しかし、PybrainはMathplotlibやpyplotなどの他のフレームワークと連携してデータを視覚化できます。
Pybrainの利点
Pybrainの利点は-
- Pybrainは、機械学習を学習するためのオープンソースの無料ライブラリです。 これは、機械学習に興味のある初心者にとっては良いスタートです。
- Pybrainはpythonを使用して実装しているため、Java/C ++などの言語と比較して開発が高速になります。
- Pybrainは、Pythonの他のライブラリと簡単に連携してデータを視覚化します。
- Pybrainは、フィードフォワードネットワーク、リカレントネットワーク、ニューラルネットワークなどの一般的なネットワークをサポートしています。
- .csvを使用してデータセットを読み込むことは、Pybrainでは非常に簡単です。 また、別のライブラリのデータセットを使用できます。 *Pybrainトレーナーを使用すると、データのトレーニングとテストが簡単になります。
Pybrainの制限
Pybrainは、直面している問題に対するヘルプをあまり提供しません。* stackoverflow および *Google Group で未回答のクエリがいくつかあります。
Pybrainのワークフロー
Pybrainのドキュメントによると、機械学習の流れは次の図に示されています-
最初に、前処理後にPybrainで使用できる生データがあります。
Pybrainのフローは、トレーニングデータとテストデータに分割されたデータセットから始まります。
- ネットワークが作成され、データセットとネットワークがトレーナーに提供されます。
- トレーナーはネットワーク上のデータをトレーニングし、出力をトレーニング可能なエラーと視覚化可能な検証エラーとして分類します。
- テストされたデータを検証して、出力がトレーニングされたデータと一致するかどうかを確認できます。
用語
機械学習のためにPybrainを使用する際に考慮すべき重要な用語があります。 彼らは次のとおりです-
合計エラー-ネットワークのトレーニング後に表示されるエラーを指します。 エラーが繰り返しごとに変化し続ける場合、繰り返しの間に一定のエラーが表示されるまで、落ち着くまでに時間が必要であることを意味します。 一定のエラー数の表示が開始されると、ネットワークが収束し、追加のトレーニングが適用されるかどうかに関係なく同じままになることを意味します。
訓練されたデータ-Pybrainネットワークを訓練するために使用されるデータです。
テストデータ-それは訓練されたPybrainネットワークをテストするために使用されるデータです。
レイヤー-レイヤーは基本的にネットワークの隠されたレイヤーで使用される機能のセットです。
接続-接続はレイヤーと同様に機能します。唯一の違いは、ネットワーク内のあるノードから別のノードにデータをシフトすることです。
モジュール-モジュールは、入力および出力バッファで構成されるネットワークです。
教師あり学習-この場合、入力と出力があり、アルゴリズムを使用して入力と出力をマッピングできます。 アルゴリズムは、与えられたトレーニングデータを学習するために作成され、アルゴリズムが正しいデータを予測すると、反復プロセスが停止します。
監視なし-この場合、入力はありますが、出力はわかりません。 教師なし学習の役割は、与えられたデータで可能な限り訓練を受けることです。
PyBrain-環境設定
この章では、PyBrainのインストールに取り組みます。 PyBrainでの作業を開始するには、最初にPythonをインストールする必要があります。 だから私たちは次のことに取り組むつもりです-
- Pythonをインストールする
- PyBrainをインストールする
Pythonをインストールする
Pythonをインストールするには、以下のPython公式サイトhttps://www.python.org/downloads/[www.python.org/downloads]にアクセスして、Windows、Linux/Unix、macOSで利用可能な最新バージョンをクリックします。 。 使用可能な64ビットまたは32ビットOSごとにPythonをダウンロードします。
ダウンロードしたら、*。exe *ファイルをクリックし、手順に従ってシステムにpythonをインストールします。
Pythonパッケージマネージャー、つまりpipも、上記のインストールでデフォルトでインストールされます。 システムでグローバルに動作させるには、Pythonの場所をPATH変数に直接追加します。インストールの開始時に同じものが表示され、[パスに追加]というチェックボックスを忘れずにチェックします。 チェックを忘れた場合は、以下の手順に従ってPATHに追加してください。
PATHに追加
PATHに追加するには、以下の手順に従ってください-
- コンピューターアイコンを右クリックし、プロパティ→システムの詳細設定をクリックします。
- 以下の画面が表示されます
- 上記の環境変数をクリックします。 以下の画面が表示されます
[パス]を選択し、[編集]ボタンをクリックして、最後にPythonのロケーションパスを追加します。 次に、Pythonバージョンを確認します。
Pythonバージョンの確認
以下のコードは、Pythonのバージョンを確認するのに役立ちます-
PyBrainのインストール
Pythonをインストールしたので、Pybrainをインストールします。 以下に示すように、pybrainリポジトリを複製します-
今 cd pybrain を実行し、次のコマンドを実行します-
このコマンドは、システムにpybrainをインストールします。
完了したら、pybrainがインストールされているかどうかを確認するには、コマンドラインプロンプトを開き、以下に示すようにPythonインタープリターを起動します-
以下のコードを使用してインポートpybrainを追加できます-
インポートpybrainがエラーなしで機能する場合、pybrainが正常にインストールされていることを意味します。 これで、pybrainでの作業を開始するコードを作成できます。
PyBrain-PyBrainネットワークの紹介
PyBrainは、Pythonによる機械学習用に開発されたライブラリです。 機械学習にはいくつかの重要な概念があり、その1つがネットワークです。 ネットワークはモジュールで構成され、接続を使用して接続されます。
単純なニューラルネットワークのレイアウトは次のとおりです-
Pybrainは、フィードフォワードネットワーク、リカレントネットワークなどのニューラルネットワークをサポートしています。
- フィードフォワードネットワーク*は、ノード間の情報が順方向に移動し、決して逆方向に移動しないニューラルネットワークです。 フィードフォワードネットワークは、人工ニューラルネットワークで利用可能なネットワークの中で最初で最も単純なネットワークです。 情報は、入力ノードから、非表示ノードの隣に、さらに出力ノードに渡されます。
簡単なフィードフォワードネットワークレイアウトを次に示します。
円はモジュールと呼ばれ、矢印の付いた線はモジュールへの接続です。
ノード A 、 B 、 C および D は入力ノードです
上記のネットワークでは、4つの入力ノード、4つの隠れ層、1つの出力があります。 図に示されている線の数は、トレーニング中に調整されるモデル内の重みパラメーターを示しています。
- リカレントネットワーク*はフィードフォワードネットワークに似ていますが、各ステップでデータを記憶する必要があるという唯一の違いがあります。 各ステップの履歴を保存する必要があります。
リカレントネットワークのシンプルなレイアウトを次に示します-
PyBrain-ネットワークでの作業
ネットワークはモジュールで構成され、モジュールは接続を使用して接続されます。 この章では、次のことを学びます-
- ネットワークを作成
- ネットワークの分析
ネットワークを作成する
pythonインタープリターを使用してコードを実行します。 pybrainでネットワークを作成するには、以下に示すように buildNetwork apiを使用する必要があります-
buildNetwork()を使用してネットワークを作成しました。パラメーターは2、3、1です。つまり、ネットワークは2つの入力、3つの非表示、1つの出力で構成されています。
以下は、ネットワークの詳細、つまりモジュールと接続です-
モジュールはレイヤーで構成され、接続はFullConnectionオブジェクトから作成されます。 したがって、各モジュールと接続には、上記のように名前が付けられます。
分析ネットワーク
次のように名前を参照することにより、モジュール層と接続に個別にアクセスできます-
PyBrain-データセットの操作
データセットは、ネットワークをテスト、検証、トレーニングするために提供される入力データです。 使用するデータセットのタイプは、機械学習で実行するタスクによって異なります。 この章では、以下を見ていきます-
- データセットの作成
- データセットへのデータの追加
最初に、データセットを作成し、指定された入力でデータセットをテストする方法を学びます。
データセットの作成
データセットを作成するには、pybrainデータセットパッケージを使用する必要があります: pybrain.datasets 。
Pybrainは、 _ SupervisedDataset ' 、SequentialDataset、ClassificationDataSetなどのデータセットクラスをサポートしています。 _SupervisedDataset' を使用して、データセットを作成します。使用するデータセットは、ユーザーが実装しようとしている機械学習タスクに依存します。
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
与えられる入力は2次元配列のようなもので、1つの出力が得られます。 したがって、ここで入力はサイズになり、ターゲットは1になります。 したがって、データセットの入力は2,1になります。
createdataset.py
これは、上記のコードpython createdataset.pyを実行したときに得られるものです-
上記のように、サイズ2の入力とサイズ1のターゲットが表示されます。
データセットへのデータの追加
サンプルデータをデータセットに追加しましょう。
createdataset.py
以下に示すように、XORModel配列を作成しました-
データセットにデータを追加するには、入力とターゲットを取得するaddSample()メソッドを使用します。
addSampleにデータを追加するには、以下に示すようにxorModel配列をループします-
実行後、次の出力が得られます-
python createdataset.py
print(sds ['input'])print(sds ['target'])
PyBrain-データセットの種類
データセットは、ネットワークでテスト、検証、トレーニングするために提供されるデータです。 使用するデータセットのタイプは、機械学習で実行するタスクによって異なります。 この章では、さまざまなデータセットタイプについて説明します。
私たちは、次のパッケージを追加することにより、データセットを扱うことができます-
SupervisedDataSet
SupervisedDataSetは、 _ input_ および target のフィールドで構成されています。 これはデータセットの最も単純な形式であり、主に教師付き学習タスクに使用されます。
以下は、コードでそれを使用する方法です-
SupervisedDataSetで利用可能なメソッドは次のとおりです-
addSample(inp、target)
このメソッドは、入力とターゲットの新しいサンプルを追加します。
splitWithProportion(proportion = 0.10)
これにより、データセットが2つの部分に分割されます。 最初の部分には、入力として指定されたデータセットの%があります。つまり、入力が.10の場合、データセットの10%とデータの90%です。 あなたの選択に従って割合を決めることができます。 分割されたデータセットは、ネットワークのテストとトレーニングに使用できます。
- copy()*-データセットのディープコピーを返します。
- clear()*-データセットをクリアします。
saveToFile(ファイル名、フォーマット=なし、** kwargs)
ファイル名で指定されたファイルにオブジェクトを保存します。
例
以下は、SupervisedDatasetを使用した実際の例です-
出力
上記のプログラムの出力は次のとおりです-
ClassificationDataSet
このデータセットは、主に分類の問題に対処するために使用されます。 入力、ターゲットフィールド、および指定されたターゲットの自動バックアップである「クラス」と呼ばれる追加フィールドを取ります。 たとえば、出力は1または0であるか、指定された入力に基づいて出力とともにグループ化されます。つまり、特定の1つのクラスに分類されます。
コードでそれを使用する方法は次のとおりです-
ClassificationDataSetで利用可能なメソッドは次のとおりです-
例
上記の例で使用されるデータセットは数字のデータセットであり、クラスは0〜9であるため、10のクラスがあります。 入力は64、ターゲットは1、クラスは10です。
このコードは、データセットを使用してネットワークをトレーニングし、トレーニングエラーと検証エラーのグラフを出力します。 また、次のようなテストデータのパーセント誤差を示します-
出力
PyBrain-データセットのデータのインポート
この章では、Pybrainデータセットでデータを動作させる方法を学びます。
最も一般的に使用されるのはデータセットです-
- sklearnを使用する
- CSVファイルから
sklearnを使用する
sklearnを使用する
sklearnからのデータセットの詳細を含むリンクは次のとおりです:https://scikit-learn.org/stable/datasets/indexl
sklearnのデータセットを使用する方法の例をいくつか示します-
例1:load_digits()
例2:load_iris()
CSVファイルから
また、次のようにcsvファイルからのデータを使用することができます-
xor真理値表のサンプルデータを次に示します。datasettest.csv
データセットの.csvファイルからデータを読み取るための作業例を次に示します。
例
例に示すように、パンダを使用してcsvファイルからデータを読み取ります。
出力
PyBrain-ネットワーク上のトレーニングデータセット
これまで、ネットワークとデータセットの作成方法を見てきました。 データセットとネットワークを一緒に使用するには、トレーナーの助けを借りて行う必要があります。
以下は、作成されたネットワークにデータセットを追加し、後でトレーナーを使用してトレーニングおよびテストする方法を確認するための実際の例です。
testnetwork.py
ネットワークとデータセットをテストするには、BackpropTrainerが必要です。 BackpropTrainerは、エラーを(時間を通して)バックプロパゲーションすることにより、監視対象データセット(潜在的にシーケンシャル)に従ってモジュールのパラメーターをトレーニングするトレーナーです。
クラスの2つのデータセット-SupervisedDataSetを作成しました。 私たちは次のようなNORデータモデルを利用しています-
A | B | A NOR B |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
上記のデータモデルは、ネットワークのトレーニングに使用されます。
以下は、テストに使用されるデータセットです-
トレーナーは次のように使用されます-
データセットでテストするには、以下のコードを使用できます-
出力
python testnetwork.py
出力を確認すると、テストデータは提供されたデータセットとほぼ一致するため、エラーは0.008です。
ここで、テストデータを変更し、平均誤差を見てみましょう。 以下に示すように、出力を変更しました-
以下は、テストに使用されるデータセットです-
それではテストしてみましょう。
出力
python testnework.py
エラーは0.36と表示されます。これは、テストデータが訓練されたネットワークと完全に一致していないことを示しています。
PyBrain-テストネットワーク
この章では、データをトレーニングし、トレーニングしたデータのエラーをテストする例をいくつか見ていきます。
私たちはトレーナーを利用するつもりです-
BackpropTrainer
BackpropTrainerは、エラーを(時間を通して)バックプロパゲーションすることにより、教師付きまたはClassificationDataSetデータセット(潜在的にシーケンシャル)に従ってモジュールのパラメーターをトレーニングするトレーナーです。
TrainUntilConvergence
収束するまで、データセットでモジュールをトレーニングするために使用されます。
ニューラルネットワークを作成すると、与えられたトレーニングデータに基づいてトレーニングされますが、ネットワークが適切にトレーニングされているかどうかは、そのネットワークでテストされたテストデータの予測に依存します。
ニューラルネットワークを構築し、トレーニングエラー、テストエラー、検証エラーを予測する実際の例を順を追って見てみましょう。
ネットワークをテストする
以下は、ネットワークをテストするために従う手順です-
- 必要なPyBrainおよびその他のパッケージのインポート
- ClassificationDataSetを作成する
- データセットをテストデータとして25%、トレーニング済みデータとして75%に分割
- TestDataとトレーニングデータをClassificationDataSetに変換して戻す
- ニューラルネットワークの作成
- ネットワークのトレーニング
- エラーと検証データの視覚化
- テストデータエラーの割合
ステップ1
必要なPyBrainおよびその他のパッケージをインポートします。
必要なパッケージは、以下に示すようにインポートされます-
ステップ2
次のステップは、ClassificationDataSetを作成することです。
データセットの場合、以下に示すように、sklearnデータセットのデータセットを使用します-
以下のリンクでsklearnのload_digitsデータセットを参照してください-
- ステップ3 *
データセットをテストデータとして25%、トレーニング済みデータとして75%に分割-
そのため、ここでは、値が0.25のsplitWithProportion()というデータセットのメソッドを使用しました。これは、データセットをテストデータとして25%、トレーニングデータとして75%に分割します。
- ステップ4 *
TestdataとトレーニングデータをClassificationDataSetに変換します。
データセットでsplitWithProportion()メソッドを使用すると、データセットがsuperviseddatasetに変換されるため、上記の手順に示すように、データセットを再度classificationdatasetに変換します。
- ステップ5 *
次のステップは、ニューラルネットワークの作成です。
入力と出力がトレーニングデータから使用されるネットワークを作成しています。
- ステップ6 *
ネットワークのトレーニング
今、重要な部分は、以下に示すように、データセット上のネットワークを訓練することです-
BackpropTrainer()メソッドを使用し、作成されたネットワーク上のデータセットを使用しています。
- ステップ7 *
次のステップは、エラーの可視化とデータの検証です。
エポック10で収束するトレーニングデータでtrainUntilConvergenceというメソッドを使用します。 以下に示すようにプロットしたトレーニングエラーと検証エラーを返します。 青い線はトレーニングエラーを示し、赤い線は検証エラーを示します。
上記のコードの実行中に受信した合計エラーは以下に示されています-
エラーは0.04から始まり、エポックごとに低下します。つまり、ネットワークはトレーニングされ、エポックごとに改善されます。
- ステップ8 *
テストデータエラーの割合
以下に示すpercentErrorメソッドを使用して、パーセントエラーを確認できます-
- testDataのエラー率*-3.34075723830735
エラーの割合、つまり3.34%を取得しています。これは、ニューラルネットワークの精度が97%であることを意味します。
以下は完全なコードです-
PyBrain-フィードフォワードネットワークの使用
フィードフォワードネットワークは、ノード間の情報が順方向に移動し、決して逆方向に移動しないニューラルネットワークです。 フィードフォワードネットワークは、人工ニューラルネットワークで利用可能なネットワークの中で最初で最も単純なネットワークです。 情報は、入力ノードから、非表示ノードの隣に、さらに出力ノードに渡されます。
この章では、次の方法について説明します-
- フィードフォワードネットワークを作成する
- 接続とモジュールをFFNに追加する
フィードフォワードネットワークの作成
選択したpython IDE、つまりPyCharmを使用できます。 これでは、Visual Studio Codeを使用してコードを記述し、ターミナルで同じものを実行します。
フィードフォワードネットワークを作成するには、以下に示すように pybrain.structure からインポートする必要があります-
ffn.py
以下に示すようにffn.pyを実行します-
フィードフォワードネットワークにモジュールと接続を追加していません。 したがって、ネットワークには、モジュールと接続の空の配列が表示されます。
モジュールと接続の追加
まず、入力、非表示、出力の各レイヤーを作成し、以下に示すようにモジュールに追加します-
ffy.py
出力
モジュールと接続は空のままです。 以下に示すように作成されたモジュールへの接続を提供する必要があります-
以下に、入力層、非表示層、出力層の間に接続を作成し、ネットワークに接続を追加するコードを示します。
ffy.py
出力
まだモジュールと接続を取得できません。 ここで最終ステップを追加しましょう。つまり、以下に示すようにsortModules()メソッドを追加する必要があります-
ffy.py
出力
これで、feedforwardnetworkのモジュールと接続の詳細を確認できます。
PyBrain-リカレントネットワークでの作業
リカレントネットワークはフィードフォワードネットワークと同じですが、各ステップでデータを覚えておく必要がある点のみが異なります。各ステップの履歴を保存する必要があります。
私たちは方法を学びます-
- リカレントネットワークを作成する
- モジュールと接続の追加
リカレントネットワークの作成
リカレントネットワークを作成するには、以下に示すようにRecurrentNetworkクラスを使用します-
rn.py
python rn.py
リカレントネットワークのリカレント接続と呼ばれる新しい接続を確認できます。 現在、利用可能なデータはありません。
レイヤーを作成し、モジュールに追加して接続を作成しましょう。
モジュールと接続の追加
レイヤー、つまり入力、非表示、出力を作成します。 レイヤーが入力および出力モジュールに追加されます。 次に、非表示への入力、出力への非表示、および非表示から非表示への繰り返し接続を作成します。
モジュールと接続があるリカレントネットワークのコードは次のとおりです。
rn.py
python rn.py
上記の出力では、モジュール、接続、繰り返し接続を確認できます。
次に示すように、アクティブ化メソッドを使用してネットワークをアクティブ化します-
rn.py
以前に作成したものに以下のコードを追加します-
python rn.py
最適化アルゴリズムを使用したトレーニングネットワーク
pybrainのトレーナーを使用してネットワークをトレーニングする方法を見てきました。 この章では、Pybrainで利用可能な最適化アルゴリズムを使用してネットワークをトレーニングします。
例では、以下に示すようにインポートする必要があるGA最適化アルゴリズムを使用します-
例
以下は、GA最適化アルゴリズムを使用したトレーニングネットワークの実用例です-
出力
以下に示すように、入力に対するネットワーク上のactivateメソッドは、出力とほぼ一致します-
PyBrain-レイヤー
レイヤーは基本的に、ネットワークの非表示レイヤーで使用される一連の機能です。
この章では、レイヤーに関する次の詳細を説明します-
- レイヤーを理解する
- Pybrainを使用してレイヤーを作成する
レイヤーを理解する
次のようにレイヤーを使用した例を以前に見ました-
- TanhLayer
- SoftmaxLayer
TanhLayerを使用した例
以下は、ネットワークを構築するためにTanhLayerを使用した1つの例です-
出力
上記のコードの出力は次のとおりです-
SoftMaxLayerを使用した例
以下は、SoftmaxLayerを使用してネットワークを構築した1つの例です-
出力
出力は次のとおりです-
Pybrainでレイヤーを作成する
Pybrainでは、次のように独自のレイヤーを作成できます-
レイヤーを作成するには、 _ NeuronLayer class_ を基本クラスとして使用して、すべてのタイプのレイヤーを作成する必要があります。
例
レイヤーを作成するには、2つのメソッドforwardImplementation()_およびbackwardImplementation()_を実装する必要があります。
__backwardImplementation()_は、指定された入力に対する出力の導関数を計算するために使用されます。
だからPybrainでレイヤーを実装するには、これはレイヤークラスのスケルトンです-
あなたが層として二次多項式関数を実装したい場合は、次のようにすることができます-
多項式関数があるとします-
上記の多項式関数の導関数は次のようになります-
上記の多項式関数の最終層クラスは次のようになります-
今、下に示すように作成されたレイヤーを利用しましょう-
GradientCheck()は、レイヤーが正常に機能しているかどうかをテストします。レイヤーが使用されているネットワークをgradientCheck(n)に渡す必要があります。
出力
PyBrain-接続
接続はレイヤーと同様に機能します。唯一の違いは、ネットワーク内のあるノードから別のノードにデータをシフトすることです。
この章では、以下について学習します-
- 接続について
- 接続を作成する
接続について
ネットワークの作成中に使用される接続の動作例を次に示します。
例
出力
接続を作成する
Pybrainでは、以下に示すように接続モジュールを使用して接続を作成できます-
例
接続を作成するには、forwardImplementation()_とbackwardImplementation()_の2つのメソッドがあります。
__forwardImplementation()_は、_inbuf_という着信モジュールの出力バッファーと、_outbuf_という発信モジュールの入力バッファーで呼び出されます。 _inbuf_は、発信モジュール_outbuf_に追加されます。
backwardImplementation()は、_outerr _、 inerr_、および_inbuf_で呼び出されます。 発信モジュールエラーは、 backwardImplementation()_の着信モジュールエラーに追加されます。
ここで、ネットワークで YourConnection を使用してみましょう。
出力
PyBrain-強化学習モジュール
強化学習(RL)は、機械学習の重要な部分です。 強化学習により、エージェントは環境からの入力に基づいて行動を学習します。
強化中に相互作用するコンポーネントは次のとおりです-
- 環境
- エージェント
- Task
- 実験
強化学習のレイアウトは以下のとおりです-
RLでは、エージェントは環境と繰り返し対話します。 各反復で、エージェントは報酬のあるオブザベーションを受け取ります。 次に、アクションを選択し、環境に送信します。 各反復での環境は新しい状態に移行し、毎回受け取った報酬は保存されます。
RLエージェントの目標は、できるだけ多くの報酬を収集することです。 反復の間、エージェントのパフォーマンスは、適切に機能するエージェントのパフォーマンスと比較され、パフォーマンスの違いは報酬または失敗のいずれかを引き起こします。 RLは基本的に、ロボット制御、エレベータ、通信、ゲームなどの問題解決タスクで使用されます。
PybrainでRLを操作する方法を見てみましょう。
迷路*環境*で作業します。これは、1が壁で0が自由フィールドである2次元のnumpy配列を使用して表されます。 エージェントの責任は、フリーフィールド上を移動してゴールポイントを見つけることです。
以下は、迷路環境での作業の段階的な流れです。
ステップ1
以下のコードで必要なパッケージをインポートします-
ステップ2
以下のコードを使用して迷路環境を作成します-
ステップ3
次のステップは、エージェントを作成することです。
エージェントはRLで重要な役割を果たします。 getAction()メソッドとintegratedObservation()メソッドを使用して、迷路環境と対話します。
エージェントには、コントローラー(状態をアクションにマップする)と学習者がいます。
PyBrainのコントローラーはモジュールのようなもので、入力はステートであり、アクションに変換されます。
次に、学習者を作成します。 エージェントで使用する学習者にSARSA()学習アルゴリズムを使用します。
ステップ4
この手順では、環境にエージェントを追加しています。
エージェントを環境に接続するには、タスクと呼ばれる特別なコンポーネントが必要です。 *タスク*の役割は、環境内の目標と、エージェントがアクションに対する報酬を得る方法を探すことです。
環境には独自のタスクがあります。 使用したMaze環境にはMDPMazeTaskタスクがあります。 MDPは*「マルコフ決定プロセス」*の略で、エージェントが迷路での位置を知っていることを意味します。 環境はタスクのパラメーターになります。
ステップ5
環境にエージェントを追加した後の次のステップは、実験を作成することです。
ここで、タスクとエージェントを相互に調整できるように、実験を作成する必要があります。
今、私たちは以下に示すように実験を1000回実行するつもりです-
次のコードが実行されると、環境はエージェントとタスクの間で100回実行されます-
各反復の後、新しい情報をタスクに返し、エージェントに渡す情報と報酬を決定します。 forループ内でエージェントを学習してリセットした後、新しいテーブルをプロットします。
ここに完全なコードがあります-
例
出力
自由フィールドの色は、反復ごとに変更されます。
PyBrain-APIとツール
これで、ネットワークを構築してトレーニングする方法がわかりました。 この章では、ネットワークを作成して保存し、必要に応じてネットワークを使用する方法を理解します。
ネットワークの保存と回復
PybrainツールのNetworkWriterとNetworkReader、つまりpybrain.tools.customxmlを使用します。
ここに同じの実例があります-
ネットワークはnetwork.xml内に保存されます。
必要に応じてXMLを読み取るには、次のコードを使用できます-
ここに作成されたnetwork.xmlファイルがあります-
API
以下は、このチュートリアル全体で使用したAPIのリストです。
ネットワーク向け
- * activate(input)*-パラメータ、つまりテストする値を受け取ります。 指定された入力に基づいて結果を返します。
- * activateOnDataset(dataset)*-指定されたデータセットを反復処理し、出力を返します。
- * addConnection(c)*-ネットワークへの接続を追加します。
- * addInputModule(m)*-ネットワークに与えられたモジュールを追加し、入力モジュールとしてマークします。
- * addModule(m)*-指定されたモジュールをネットワークに追加します。
- * addOutputModule(m)*-ネットワークにモジュールを追加し、出力モジュールとしてマークします。
- * reset()*-モジュールとネットワークをリセットします。
- * sortModules()*-内部でソートすることにより、アクティベーションのためにネットワークを準備します。 アクティベーションの前に呼び出す必要があります。
監視対象データセットの場合
- * addSample(inp、target)*-入力とターゲットの新しいサンプルを追加します。
- * splitWithProportion(proportion = 0.5)*-データセットを2つの部分に分割します。最初の部分には比例部分のデータが含まれ、次のセットには残りの部分が含まれます。
トレーナー向け
- trainUntilConvergence(dataset = None、maxEpochs = None、verbose = None、continueEpochs = 10、validationProportion = 0.25)*-データセット上でモジュールが収束するまでトレーニングするために使用されます。 データセットが指定されていない場合、開始時に使用されたトレーニング済みデータセットでトレーニングを試みます。
PyBrain-例
この章では、PyBrainを使用して実行されるすべての可能な例がリストされています。
例1
NOR真理値表を使用して、正確性をテストします。
出力
例2
データセットについては、以下に示すように、sklearnデータセットのデータセットを使用します。 scikit-learn.org]
10のクラス、つまり0-9から予測される数字があります。
Xの合計入力データは64です。