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
\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