OSDN Git Service

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/simplenn/trunk@8 dd34cd95-496f-4e97...
authoru6k <u6k@dd34cd95-496f-4e97-851c-65f59ff6709a>
Fri, 18 Apr 2008 16:54:07 +0000 (16:54 +0000)
committeru6k <u6k@dd34cd95-496f-4e97-851c-65f59ff6709a>
Fri, 18 Apr 2008 16:54:07 +0000 (16:54 +0000)
12 files changed:
simplenn/.classpath
simplenn/src/main/java/jp/gr/java_conf/u6k/simplenn/SimpleNNApplet.java
simplenn/src/main/resources/0.txt [new file with mode: 0644]
simplenn/src/main/resources/1.txt [new file with mode: 0644]
simplenn/src/main/resources/2.txt [new file with mode: 0644]
simplenn/src/main/resources/3.txt [new file with mode: 0644]
simplenn/src/main/resources/4.txt [new file with mode: 0644]
simplenn/src/main/resources/5.txt [new file with mode: 0644]
simplenn/src/main/resources/6.txt [new file with mode: 0644]
simplenn/src/main/resources/7.txt [new file with mode: 0644]
simplenn/src/main/resources/8.txt [new file with mode: 0644]
simplenn/src/main/resources/9.txt [new file with mode: 0644]

index 1e6d54b..06355fc 100644 (file)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <classpath>\r
        <classpathentry kind="src" path="src/main/java"/>\r
+       <classpathentry kind="src" path="src/main/resources"/>\r
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
        <classpathentry kind="output" path="bin"/>\r
 </classpath>\r
index 2acf0e5..3b280b3 100644 (file)
@@ -10,6 +10,9 @@ import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;\r
 import java.awt.event.MouseListener;\r
 import java.awt.event.MouseMotionListener;\r
+import java.io.BufferedReader;\r
+import java.io.IOException;\r
+import java.io.InputStreamReader;\r
 \r
 /**\r
  * <p>\r
@@ -31,82 +34,74 @@ public class SimpleNNApplet extends Applet implements MouseListener, MouseMotion
 \r
     int       RY0          = 225, RY1 = 240;\r
 \r
-    int       WIDTH        = 7;                                                                                                                                                                                                  // 入力データの幅\r
+    int       WIDTH        = 7;                                        // 入力データの幅\r
 \r
-    int       HEIGHT       = 11;                                                                                                                                                                                                 // 入力データの高さ\r
+    int       HEIGHT       = 11;                                       // 入力データの高さ\r
 \r
-    int       INPUT        = WIDTH * HEIGHT;                                                                                                                                                                                     // 入力層の数(入力データ数)\r
+    int       INPUT        = WIDTH * HEIGHT;                           // 入力層の数(入力データ数)\r
 \r
-    int       HIDDEN       = 16;                                                                                                                                                                                                 // 隠れ層の数\r
+    int       HIDDEN       = 16;                                       // 隠れ層の数\r
 \r
-    int       PATTERN      = 10;                                                                                                                                                                                                 // パターンの種類\r
+    int       PATTERN      = 10;                                       // パターンの種類\r
 \r
-    int       OUTPUT       = PATTERN;                                                                                                                                                                                            // 出力層の数(出力データ数)\r
+    int       OUTPUT       = PATTERN;                                  // 出力層の数(出力データ数)\r
 \r
-    int       OUTER_CYCLES = 100;                                                                                                                                                                                                // 外部サイクル(一連のパターンの繰返し学習)の回数\r
+    int       OUTER_CYCLES = 100;                                      // 外部サイクル(一連のパターンの繰返し学習)の回数\r
 \r
-    int       INNER_CYCLES = 100;                                                                                                                                                                                                // 内部サイクル(同一パターンの繰返し学習)の回数\r
+    int       INNER_CYCLES = 100;                                      // 内部サイクル(同一パターンの繰返し学習)の回数\r
 \r
-    float     ALPHA        = 1.2f;                                                                                                                                                                                               // 学習の加速係数\r
+    float     ALPHA        = 1.2f;                                     // 学習の加速係数\r
 \r
-    float     BETA         = 1.2f;                                                                                                                                                                                               // シグモイド曲線の傾斜\r
+    float     BETA         = 1.2f;                                     // シグモイド曲線の傾斜\r
 \r
-    int[]     sample_in    = new int[INPUT];                                                                                                                                                                                     // 学習用入力\r
+    int[]     sample_in    = new int[INPUT];                           // 学習用入力\r
 \r
-    int[]     written_in   = new int[INPUT];                                                                                                                                                                                     // 認識用手書き入力\r
+    int[]     written_in   = new int[INPUT];                           // 認識用手書き入力\r
 \r
-    float[][] weight_ih    = new float[INPUT][HIDDEN];                                                                                                                                                                           // 入力層と隠れ層の間の重み係数\r
+    float[][] weight_ih    = new float[INPUT][HIDDEN];                 // 入力層と隠れ層の間の重み係数\r
 \r
-    float[]   thresh_h     = new float[HIDDEN];                                                                                                                                                                                  // 隠れ層の閾値\r
+    float[]   thresh_h     = new float[HIDDEN];                        // 隠れ層の閾値\r
 \r
-    float[]   hidden_out   = new float[HIDDEN];                                                                                                                                                                                  // 隠れ層の出力\r
+    float[]   hidden_out   = new float[HIDDEN];                        // 隠れ層の出力\r
 \r
-    float[][] weight_ho    = new float[HIDDEN][OUTPUT];                                                                                                                                                                          // 隠れ層と出力層の間の重み係数\r
+    float[][] weight_ho    = new float[HIDDEN][OUTPUT];                // 隠れ層と出力層の間の重み係数\r
 \r
-    float[]   thresh_o     = new float[OUTPUT];                                                                                                                                                                                  // 出力層の閾値\r
+    float[]   thresh_o     = new float[OUTPUT];                        // 出力層の閾値\r
 \r
-    float[]   recog_out    = new float[OUTPUT];                                                                                                                                                                                  // 認識出力(出力層の出力)\r
+    float[]   recog_out    = new float[OUTPUT];                        // 認識出力(出力層の出力)\r
 \r
-    int[]     teach        = new int[PATTERN];                                                                                                                                                                                   // 教師信号\r
+    int[]     teach        = new int[PATTERN];                         // 教師信号\r
 \r
-    boolean   learning_flag;                                                                                                                                                                                                     // 「学習モード」フラグ\r
+    boolean   learning_flag;                                           // 「学習モード」フラグ\r
 \r
-    // 学習用入力データの基となるパターン\r
-    int[][]   sample_array = { { 0, 0, 1, 1, 1, 0, 0, // '0'\r
-            0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0 },\r
+    int[][]   sample_array;                                            // 学習用入力データの基となるパターン\r
 \r
-                           { 0, 0, 0, 1, 0, 0, 0, // '1'\r
-            0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },\r
+    int[][]   teach_array  = new int[PATTERN][OUTPUT];                 // パターンと出力すべき教師信号の比較表\r
 \r
-                           { 0, 0, 1, 1, 1, 0, 0, // '2'\r
-            0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 },\r
-\r
-                           { 0, 0, 1, 1, 1, 0, 0, // '3'\r
-            0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0 },\r
-\r
-                           { 0, 0, 0, 0, 1, 0, 0, // '4'\r
-            0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 },\r
-\r
-                           { 1, 1, 1, 1, 1, 1, 1, // '5'\r
-            1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0 },\r
-\r
-                           { 0, 0, 0, 0, 1, 1, 0, // '6'\r
-            0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0 },\r
-\r
-                           { 1, 1, 1, 1, 1, 1, 1, // '7'\r
-            0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },\r
-\r
-                           { 0, 0, 1, 1, 1, 0, 0, // '8'\r
-            0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0 },\r
-\r
-                           { 0, 1, 1, 1, 1, 1, 0, // '9'\r
-            1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0 } };\r
-\r
-    int[][]   teach_array  = new int[PATTERN][OUTPUT];                                                                                                                                                                           // パターンと出力すべき教師信号の比較表\r
-\r
-    int       x_new, y_new, x_old, y_old;                                                                                                                                                                                        // 手書き文字入力用座標\r
+    int       x_new, y_new, x_old, y_old;                              // 手書き文字入力用座標\r
 \r
     public void init() {\r
+        // 学習用入力データの元となるパターンの読み込み\r
+        this.sample_array = new int[10][WIDTH * HEIGHT];\r
+        for (int i = 0; i <= 9; i++) {\r
+            BufferedReader r = new BufferedReader(new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream(i + ".txt")));\r
+            try {\r
+                try {\r
+                    int j = 0;\r
+                    String line;\r
+                    while ((line = r.readLine()) != null) {\r
+                        for (char c : line.toCharArray()) {\r
+                            this.sample_array[i][j] = Integer.parseInt(Character.toString(c));\r
+                            j++;\r
+                        }\r
+                    }\r
+                } finally {\r
+                    r.close();\r
+                }\r
+            } catch (IOException e) {\r
+                throw new RuntimeException(e);\r
+            }\r
+        }\r
 \r
         setBackground(Color.gray);\r
 \r
diff --git a/simplenn/src/main/resources/0.txt b/simplenn/src/main/resources/0.txt
new file mode 100644 (file)
index 0000000..5b622ad
--- /dev/null
@@ -0,0 +1,11 @@
+0011100\r
+0100010\r
+1000001\r
+1000001\r
+1000001\r
+1000001\r
+1000001\r
+1000001\r
+1000001\r
+0100010\r
+0011100\r
diff --git a/simplenn/src/main/resources/1.txt b/simplenn/src/main/resources/1.txt
new file mode 100644 (file)
index 0000000..b015b0f
--- /dev/null
@@ -0,0 +1,11 @@
+0001000\r
+0001000\r
+0001000\r
+0001000\r
+0001000\r
+0001000\r
+0001000\r
+0001000\r
+0001000\r
+0001000\r
+0001000\r
diff --git a/simplenn/src/main/resources/2.txt b/simplenn/src/main/resources/2.txt
new file mode 100644 (file)
index 0000000..e5f2e52
--- /dev/null
@@ -0,0 +1,11 @@
+0011100\r
+0100010\r
+1000001\r
+0000001\r
+0000001\r
+0000010\r
+0000100\r
+0001000\r
+0010000\r
+0100000\r
+1111111\r
diff --git a/simplenn/src/main/resources/3.txt b/simplenn/src/main/resources/3.txt
new file mode 100644 (file)
index 0000000..7e07aff
--- /dev/null
@@ -0,0 +1,11 @@
+0011100\r
+0100010\r
+1000001\r
+0000010\r
+0000100\r
+0000010\r
+0000001\r
+0000001\r
+1000001\r
+0100010\r
+0011100\r
diff --git a/simplenn/src/main/resources/4.txt b/simplenn/src/main/resources/4.txt
new file mode 100644 (file)
index 0000000..097d848
--- /dev/null
@@ -0,0 +1,11 @@
+0000100\r
+0001100\r
+0010100\r
+0010100\r
+0100100\r
+0100100\r
+1000100\r
+1111111\r
+0000100\r
+0000100\r
+0000100\r
diff --git a/simplenn/src/main/resources/5.txt b/simplenn/src/main/resources/5.txt
new file mode 100644 (file)
index 0000000..80bc698
--- /dev/null
@@ -0,0 +1,11 @@
+1111111\r
+1000000\r
+1000000\r
+1000000\r
+1111100\r
+0000010\r
+0000001\r
+0000001\r
+0000001\r
+1000010\r
+0111110\r
diff --git a/simplenn/src/main/resources/6.txt b/simplenn/src/main/resources/6.txt
new file mode 100644 (file)
index 0000000..330d098
--- /dev/null
@@ -0,0 +1,11 @@
+0000110\r
+0001000\r
+0010000\r
+0100000\r
+0100000\r
+1000000\r
+1011100\r
+1100010\r
+1000001\r
+0100010\r
+0011100\r
diff --git a/simplenn/src/main/resources/7.txt b/simplenn/src/main/resources/7.txt
new file mode 100644 (file)
index 0000000..8bbe5dd
--- /dev/null
@@ -0,0 +1,11 @@
+1111111\r
+0000001\r
+0000001\r
+0000010\r
+0000010\r
+0000100\r
+0000100\r
+0001000\r
+0001000\r
+0010000\r
+0010000\r
diff --git a/simplenn/src/main/resources/8.txt b/simplenn/src/main/resources/8.txt
new file mode 100644 (file)
index 0000000..820ccdb
--- /dev/null
@@ -0,0 +1,11 @@
+0011100\r
+0100010\r
+1000001\r
+1000001\r
+0100010\r
+0011100\r
+0100010\r
+1000001\r
+1000001\r
+1000001\r
+0111110\r
diff --git a/simplenn/src/main/resources/9.txt b/simplenn/src/main/resources/9.txt
new file mode 100644 (file)
index 0000000..1d25812
--- /dev/null
@@ -0,0 +1,11 @@
+0111110\r
+1000001\r
+1000001\r
+1000001\r
+0111111\r
+0000001\r
+0000001\r
+0000001\r
+0000001\r
+1000001\r
+0111110\r