\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
* @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
\r
/**\r
* <p>\r
+ * 学習係数(learning coefficient)。\r
+ * </p>\r
+ */\r
+ private double learningCoefficient;\r
+\r
+ /**\r
+ * <p>\r
* 入力層と隠れ層の間の重み係数。\r
* </p>\r
*/\r
\r
/**\r
* <p>\r
- * 学習係数(learning coefficient)。\r
+ * このコンストラクタは呼び出さないでください。デシリアライズのために定義しています。\r
* </p>\r
*/\r
- private double learningCoefficient;\r
+ public SimpleNN() {\r
+ }\r
\r
/**\r
* <p>\r
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
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
* ニューラル・ネットワーク。\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
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