OSDN Git Service

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/simplenn/trunk@24 dd34cd95-496f...
authoru6k <u6k@dd34cd95-496f-4e97-851c-65f59ff6709a>
Mon, 21 Apr 2008 04:45:58 +0000 (04:45 +0000)
committeru6k <u6k@dd34cd95-496f-4e97-851c-65f59ff6709a>
Mon, 21 Apr 2008 04:45:58 +0000 (04:45 +0000)
simplenn/src/main/java/jp/gr/java_conf/u6k/simplenn/SimpleNN.java
simplenn/src/main/java/jp/gr/java_conf/u6k/simplenn/SimpleNNApplet.java

index 7b44429..4f09216 100644 (file)
 \r
 package jp.gr.java_conf.u6k.simplenn;\r
 \r
+import java.io.Externalizable;\r
+import java.io.IOException;\r
+import java.io.ObjectInput;\r
+import java.io.ObjectOutput;\r
 \r
 /**\r
  * <p>\r
@@ -43,7 +47,7 @@ package jp.gr.java_conf.u6k.simplenn;
  * @version $Id$\r
  * @see http://codezine.jp/a/article/aid/372.aspx\r
  */\r
-public final class SimpleNN {\r
+public final class SimpleNN implements Externalizable {\r
 \r
     /**\r
      * <p>\r
@@ -75,6 +79,13 @@ public final class SimpleNN {
 \r
     /**\r
      * <p>\r
+     * 学習係数(learning coefficient)。\r
+     * </p>\r
+     */\r
+    private double              learningCoefficient;\r
+\r
+    /**\r
+     * <p>\r
      * 入力層と隠れ層の間の重み係数。\r
      * </p>\r
      */\r
@@ -103,10 +114,11 @@ public final class SimpleNN {
 \r
     /**\r
      * <p>\r
-     * 学習係数(learning coefficient)\r
+     * このコンストラクタは呼び出さないでください。デシリアライズのために定義しています\r
      * </p>\r
      */\r
-    private double              learningCoefficient;\r
+    public SimpleNN() {\r
+    }\r
 \r
     /**\r
      * <p>\r
@@ -434,4 +446,94 @@ public final class SimpleNN {
         return 1.0 / (1.0 + Math.exp(-x));\r
     }\r
 \r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {\r
+        this.inputNumber = in.readInt();\r
+        this.hiddenNumber = in.readInt();\r
+        this.outputNumber = in.readInt();\r
+        this.learningCoefficient = in.readDouble();\r
+\r
+        this.weightInHidden = new double[this.inputNumber * this.hiddenNumber];\r
+        for (int i = 0; i < this.weightInHidden.length; i++) {\r
+            this.weightInHidden[i] = in.readDouble();\r
+        }\r
+\r
+        this.thresholdHidden = new double[this.hiddenNumber];\r
+        for (int i = 0; i < this.thresholdHidden.length; i++) {\r
+            this.thresholdHidden[i] = in.readDouble();\r
+        }\r
+\r
+        this.weightHiddenOut = new double[this.hiddenNumber * this.outputNumber];\r
+        for (int i = 0; i < this.weightHiddenOut.length; i++) {\r
+            this.weightHiddenOut[i] = in.readDouble();\r
+        }\r
+\r
+        this.thresholdOut = new double[this.outputNumber];\r
+        for (int i = 0; i < this.thresholdOut.length; i++) {\r
+            this.thresholdOut[i] = in.readDouble();\r
+        }\r
+    }\r
+\r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    public void writeExternal(ObjectOutput out) throws IOException {\r
+        out.writeInt(this.inputNumber);\r
+        out.writeInt(this.hiddenNumber);\r
+        out.writeInt(this.outputNumber);\r
+        out.writeDouble(this.learningCoefficient);\r
+\r
+        for (int i = 0; i < this.weightInHidden.length; i++) {\r
+            out.writeDouble(this.weightInHidden[i]);\r
+        }\r
+\r
+        for (int i = 0; i < this.thresholdHidden.length; i++) {\r
+            out.writeDouble(this.thresholdHidden[i]);\r
+        }\r
+\r
+        for (int i = 0; i < this.weightHiddenOut.length; i++) {\r
+            out.writeDouble(this.weightHiddenOut[i]);\r
+        }\r
+\r
+        for (int i = 0; i < this.thresholdOut.length; i++) {\r
+            out.writeDouble(this.thresholdOut[i]);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    public String toString() {\r
+        StringBuffer s = new StringBuffer();\r
+\r
+        s.append(super.toString() + "[\r\n");\r
+\r
+        s.append("\tinputNumber=" + this.inputNumber + "\r\n");\r
+        s.append("\thiddenNumber=" + this.hiddenNumber + "\r\n");\r
+        s.append("\toutputNumber=" + this.outputNumber + "\r\n");\r
+        s.append("\tlearningCoefficient=" + this.learningCoefficient + "\r\n");\r
+\r
+        for (int i = 0; i < this.weightInHidden.length; i++) {\r
+            s.append("\tweightInHidden[" + i + "]=" + this.weightInHidden[i] + "\r\n");\r
+        }\r
+\r
+        for (int i = 0; i < this.thresholdHidden.length; i++) {\r
+            s.append("\tthresholdHidden[" + i + "]=" + this.thresholdHidden[i] + "\r\n");\r
+        }\r
+\r
+        for (int i = 0; i < this.weightHiddenOut.length; i++) {\r
+            s.append("\tweightHiddenOut[" + i + "]=" + this.weightHiddenOut[i] + "\r\n");\r
+        }\r
+\r
+        for (int i = 0; i < this.thresholdOut.length; i++) {\r
+            s.append("\tthresholdOut[" + i + "]=" + this.thresholdOut[i] + "\r\n");\r
+        }\r
+\r
+        s.append("]");\r
+\r
+        return s.toString();\r
+    }\r
+\r
 }\r
index ba85568..efc3031 100644 (file)
@@ -41,8 +41,10 @@ import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;\r
 import java.awt.event.MouseMotionListener;\r
 import java.io.BufferedReader;\r
+import java.io.FileOutputStream;\r
 import java.io.IOException;\r
 import java.io.InputStreamReader;\r
+import java.io.ObjectOutputStream;\r
 \r
 /**\r
  * <p>\r
@@ -319,7 +321,7 @@ public final class SimpleNNApplet extends Applet implements MouseListener, Mouse
      * ニューラル・ネットワーク。\r
      * </p>\r
      */\r
-    private SimpleNN         simpleNN;\r
+    private SimpleNN         simpleNN     = new SimpleNN(SimpleNNApplet.INPUT, SimpleNNApplet.HIDDEN, SimpleNNApplet.OUTPUT, 1.2);\r
 \r
     /**\r
      * <p>\r
@@ -429,12 +431,16 @@ public final class SimpleNNApplet extends Applet implements MouseListener, Mouse
         if (ae.getSource() == this.button5) {\r
             // 「状態出力」\r
             System.out.println("状態出力開始。");\r
-            // TODO\r
-            // try {\r
-            // this.simpleNN.outputState();\r
-            // } catch (IOException e) {\r
-            // e.printStackTrace();\r
-            // }\r
+            try {\r
+                ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("C:/simplenn.dmp"));\r
+                try {\r
+                    oout.writeObject(this.simpleNN);\r
+                } finally {\r
+                    oout.close();\r
+                }\r
+            } catch (IOException e) {\r
+                e.printStackTrace();\r
+            }\r
             System.out.println("状態出力完了。");\r
         }\r
     }\r