この記事では、Javaでニューラルネットワークを簡単に作成できることを示します。 車輪を再発明しないために、すでに十分に開発されたFast Artificial Neural Networkライブラリを利用してください。 Javaプロジェクトでニューラルネットワークを使用するのは現実的です。 多くの場合、実行速度に関するJavaに対する非難が聞こえます。 違いはそれほど大きくありませんが、これについては
「C ++ Performance vs. Java vs. PHPと Python 額テスト 。
" FANNライブラリーのラッパーを使用します。
挑戦する
1人以上の敵に出会えるキャラクターを決定できるシステムを作成する必要があります。 システムは以下を認識している場合があります。
- 割合としてのキャラクターの健康;
- 銃の存在;
- 敵の数。
答えは次のいずれかのアクションの形式である必要があります。
- 攻撃する;
- 実行する;
- 非表示(突然の攻撃の場合);
- 何もしません。
トレーニングのために、「レッスン」の表を作成します。
健康 | 銃 | 敵 | アクション |
---|
50% | 1 | 1 | 攻撃する |
90% | 1 | 2 | 攻撃する |
80% | 0 | 1 | 攻撃する |
30% | 1 | 1 | 隠す |
60% | 1 | 2 | 隠す |
40% | 0 | 1 | 隠す |
90% | 1 | 7 | 実行するには |
60% | 1 | 4 | 実行するには |
10% | 0 | 1 | 実行するには |
60% | 1 | 0 | なし |
100% | 0 | 0 | なし |
準備する
最初に行うことは、
libfannをビルドしてインストールすること
です 。
次に、
fannjと
jnaをダウンロードします。
「レッスン」のセットを含むファイルを作成しましょう。
11 3 4 0.5 1 1 1 0 0 0 0.9 1 2 1 0 0 0 0.8 0 1 1 0 0 0 0.3 1 1 0 1 0 0 0.6 1 2 0 1 0 0 0.4 0 1 0 1 0 0 0.9 1 7 0 0 1 0 0.5 1 4 0 0 1 0 0.1 0 1 0 0 1 0 0.6 1 0 0 0 0 1 1.0 0 0 0 0 0 1
次に、ANNをトレーニングして、ファイルに保存します。
public static void main(String[] args) {
説明
レイヤー
ANNはニューロンの層で構成されています。 最初の層は、受容体ニューロンまたは入力データニューロンです。 出力ニューロンの最後の層。 残りはすべて非表示のレイヤーです。 この場合、最初の層には3つのニューロンがあります。
健康レベル(0.1-1.0);
武器の存在(1-yes、0-no);
敵の数。
ファン
Fannクラスのオブジェクトは、以前に作成されたレイヤーに基づいて作成されるニューラルネットワークです。
トレーナー
トレーナークラスのオブジェクトは、トレーナーの作成中に送信されるニューラルネットワークの学習アルゴリズムをカプセル化します。 トレーニング後、ファイルに保存することを忘れないでください。
結果を確認する
トレーニングをテストするには、次のコードを使用します。
public static void main(String[] args) { Fann fann = new Fann("ann"); float[][] tests = { {1.0f, 0, 1}, {0.9f, 1, 3}, {0.3f, 0, 8}, {1, 1, 8}, {0.1f, 0, 0}, }; for (float[] test:tests){ System.out.println(getAction(fann.run(test))); } } private static String getAction(float[] out){ int i = 0; for (int j = 1; j < 4; j++) { if(out[i]<out[j]){ i = j; } } switch (i){ case 0:return ""; case 1:return ""; case 2:return ""; case 3:return " "; } return ""; }
私は次の結果を得ました:
健康 | 銃 | 敵 | アクション |
---|
100% | いや | 1 | 攻撃する |
90% | あります | 3 | 隠す |
30% | いや | 8 | 実行するには |
100% | あります | 8 | 実行するには |
10% | いや | 0 | 何もしない |
建設的な批判を聞いてうれしいです。