--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<fileset-config file-format-version="1.2.0" simple-config="false">\r
+ <local-check-config name="u6k Checks" location="u6k-checkstyle-20080410.xml" type="project" description="">\r
+ <additional-data name="protect-config-file" value="false"/>\r
+ </local-check-config>\r
+ <fileset name="src" enabled="true" check-config-name="u6k Checks" local="true">\r
+ <file-match-pattern match-pattern="\.java$" include-pattern="true"/>\r
+ </fileset>\r
+</fileset-config>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="src" path="src/main/java"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
+ <classpathentry kind="output" path="bin"/>\r
+</classpath>\r
--- /dev/null
+#FindBugs User Preferences\r
+#Fri Apr 18 18:32:38 JST 2008\r
+detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true\r
+detectorBadAppletConstructor=BadAppletConstructor|false\r
+detectorBadResultSetAccess=BadResultSetAccess|true\r
+detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true\r
+detectorBadUseOfReturnValue=BadUseOfReturnValue|true\r
+detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true\r
+detectorBooleanReturnNull=BooleanReturnNull|true\r
+detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true\r
+detectorCheckTypeQualifiers=CheckTypeQualifiers|true\r
+detectorCloneIdiom=CloneIdiom|true\r
+detectorComparatorIdiom=ComparatorIdiom|true\r
+detectorConfusedInheritance=ConfusedInheritance|true\r
+detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true\r
+detectorCrossSiteScripting=CrossSiteScripting|true\r
+detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true\r
+detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true\r
+detectorDontUseEnum=DontUseEnum|true\r
+detectorDroppedException=DroppedException|true\r
+detectorDumbMethodInvocations=DumbMethodInvocations|true\r
+detectorDumbMethods=DumbMethods|true\r
+detectorDuplicateBranches=DuplicateBranches|true\r
+detectorEmptyZipFileEntry=EmptyZipFileEntry|true\r
+detectorFinalizerNullsFields=FinalizerNullsFields|true\r
+detectorFindBadCast2=FindBadCast2|true\r
+detectorFindBadForLoop=FindBadForLoop|true\r
+detectorFindCircularDependencies=FindCircularDependencies|false\r
+detectorFindDeadLocalStores=FindDeadLocalStores|true\r
+detectorFindDoubleCheck=FindDoubleCheck|true\r
+detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true\r
+detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true\r
+detectorFindFinalizeInvocations=FindFinalizeInvocations|true\r
+detectorFindFloatEquality=FindFloatEquality|true\r
+detectorFindHEmismatch=FindHEmismatch|true\r
+detectorFindInconsistentSync2=FindInconsistentSync2|true\r
+detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true\r
+detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true\r
+detectorFindMaskedFields=FindMaskedFields|true\r
+detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true\r
+detectorFindNakedNotify=FindNakedNotify|true\r
+detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true\r
+detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true\r
+detectorFindNonShortCircuit=FindNonShortCircuit|true\r
+detectorFindNullDeref=FindNullDeref|true\r
+detectorFindOpenStream=FindOpenStream|true\r
+detectorFindPuzzlers=FindPuzzlers|true\r
+detectorFindRefComparison=FindRefComparison|true\r
+detectorFindReturnRef=FindReturnRef|true\r
+detectorFindRunInvocations=FindRunInvocations|true\r
+detectorFindSelfComparison=FindSelfComparison|true\r
+detectorFindSelfComparison2=FindSelfComparison2|true\r
+detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true\r
+detectorFindSpinLoop=FindSpinLoop|true\r
+detectorFindSqlInjection=FindSqlInjection|true\r
+detectorFindTwoLockWait=FindTwoLockWait|true\r
+detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true\r
+detectorFindUnconditionalWait=FindUnconditionalWait|true\r
+detectorFindUninitializedGet=FindUninitializedGet|true\r
+detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true\r
+detectorFindUnreleasedLock=FindUnreleasedLock|true\r
+detectorFindUnsyncGet=FindUnsyncGet|true\r
+detectorFindUselessControlFlow=FindUselessControlFlow|true\r
+detectorHugeSharedStringConstants=HugeSharedStringConstants|true\r
+detectorIDivResultCastToDouble=IDivResultCastToDouble|true\r
+detectorIncompatMask=IncompatMask|true\r
+detectorInefficientMemberAccess=InefficientMemberAccess|false\r
+detectorInefficientToArray=InefficientToArray|true\r
+detectorInfiniteLoop=InfiniteLoop|true\r
+detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true\r
+detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false\r
+detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true\r
+detectorInitializationChain=InitializationChain|true\r
+detectorInstantiateStaticClass=InstantiateStaticClass|true\r
+detectorInvalidJUnitTest=InvalidJUnitTest|true\r
+detectorIteratorIdioms=IteratorIdioms|true\r
+detectorLazyInit=LazyInit|true\r
+detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true\r
+detectorMethodReturnCheck=MethodReturnCheck|true\r
+detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true\r
+detectorMutableLock=MutableLock|true\r
+detectorMutableStaticFields=MutableStaticFields|true\r
+detectorNaming=Naming|true\r
+detectorNumberConstructor=NumberConstructor|true\r
+detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true\r
+detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true\r
+detectorPublicSemaphores=PublicSemaphores|false\r
+detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true\r
+detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true\r
+detectorRedundantInterfaces=RedundantInterfaces|true\r
+detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true\r
+detectorSerializableIdiom=SerializableIdiom|true\r
+detectorStartInConstructor=StartInConstructor|true\r
+detectorStaticCalendarDetector=StaticCalendarDetector|true\r
+detectorStringConcatenation=StringConcatenation|true\r
+detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true\r
+detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true\r
+detectorSwitchFallthrough=SwitchFallthrough|true\r
+detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true\r
+detectorTestASM=TestASM|false\r
+detectorURLProblems=URLProblems|true\r
+detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true\r
+detectorUnnecessaryMath=UnnecessaryMath|true\r
+detectorUnreadFields=UnreadFields|true\r
+detectorUseObjectEquals=UseObjectEquals|false\r
+detectorUselessSubclassMethod=UselessSubclassMethod|false\r
+detectorVarArgsProblems=VarArgsProblems|true\r
+detectorVolatileUsage=VolatileUsage|true\r
+detectorWaitInLoop=WaitInLoop|true\r
+detectorWrongMapIterator=WrongMapIterator|true\r
+detectorXMLFactoryBypass=XMLFactoryBypass|true\r
+detector_threshold=3\r
+effort=default\r
+filter_settings=Low|BAD_PRACTICE,CORRECTNESS,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false\r
+filter_settings_neg=|\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+ <name>simplenn</name>\r
+ <comment></comment>\r
+ <projects>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>\r
+ <nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+/*
+ * Copyright (C) 2007 u6k.yu1@gmail.com, All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Clarkware Consulting, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact clarkware@clarkware.com.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * CLARKWARE CONSULTING OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
+ <modelVersion>4.0.0</modelVersion>\r
+ <groupId>jp.gr.java_conf.u6k.simplenn</groupId>\r
+ <artifactId>simplenn</artifactId>\r
+ <packaging>jar</packaging>\r
+ <version>1.0.0-SNAPSHOT</version>\r
+ <name>simplenn</name>\r
+ <description>「simplenn」は、バックプロパゲーションで学習し、単純で簡単に使用することができる、ニューラル・ネットワークの実装を提供します。</description>\r
+ <url>http://simplenn.sourceforge.jp/</url>\r
+ <issueManagement>\r
+ <system>SourceForge.jp</system>\r
+ <url>http://sourceforge.jp/projects/simplenn/tracker/</url>\r
+ </issueManagement>\r
+ <inceptionYear>2008</inceptionYear>\r
+ <developers>\r
+ <developer>\r
+ <id>u6k</id>\r
+ <name>u6k</name>\r
+ <email>u6k.yu1@gmail.com</email>\r
+ <url>http://d.hatena.ne.jp/u6k/</url>\r
+ </developer>\r
+ </developers>\r
+ <licenses>\r
+ <license>\r
+ <name>The BSD License</name>\r
+ <url>http://svn.sourceforge.jp/svnroot/simplenn/trunk/simplenn/LICENSE.txt</url>\r
+ <distribution>manual</distribution>\r
+ </license>\r
+ </licenses>\r
+ <scm>\r
+ <connection>scm:svn:http://svn.sourceforge.jp/svnroot/simplenn/</connection>\r
+ <developerConnection>scm:svn:http://svn.sourceforge.jp/svnroot/simplenn/</developerConnection>\r
+ <url>http://svn.sourceforge.jp/svnroot/simplenn/</url>\r
+ </scm>\r
+ <build>\r
+ <plugins>\r
+ <plugin>\r
+ <artifactId>maven-compiler-plugin</artifactId>\r
+ <configuration>\r
+ <encoding>UTF-8</encoding>\r
+ <source>1.5</source>\r
+ <target>1.5</target>\r
+ </configuration>\r
+ </plugin>\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-site-plugin</artifactId>\r
+ <configuration>\r
+ <inputEncoding>UTF-8</inputEncoding>\r
+ <outputEncoding>UTF-8</outputEncoding>\r
+ </configuration>\r
+ </plugin>\r
+ <!-- \r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-assembly-plugin</artifactId>\r
+ <configuration>\r
+ <descriptors>\r
+ <descriptor>src/main/assembly/assembly.xml</descriptor>\r
+ </descriptors>\r
+ </configuration>\r
+ </plugin>\r
+ -->\r
+ </plugins>\r
+ </build>\r
+ <reporting>\r
+ <plugins>\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-checkstyle-plugin</artifactId>\r
+ <configuration>\r
+ <configLocation>u6k-checkstyle-2008410.xml</configLocation>\r
+ <headerLocation>LICENSE.txt</headerLocation>\r
+ <propertyExpansion>basedir=.</propertyExpansion>\r
+ </configuration>\r
+ </plugin>\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-pmd-plugin</artifactId>\r
+ <configuration>\r
+ <linkXref>true</linkXref>\r
+ <sourceEncoding>UTF-8</sourceEncoding>\r
+ <targetJdk>1.5</targetJdk>\r
+ </configuration>\r
+ </plugin>\r
+ <plugin>\r
+ <groupId>org.codehaus.mojo</groupId>\r
+ <artifactId>findbugs-maven-plugin</artifactId>\r
+ </plugin>\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-changes-plugin</artifactId>\r
+ <reportSets>\r
+ <reportSet>\r
+ <reports>\r
+ <report>changes-report</report>\r
+ </reports>\r
+ </reportSet>\r
+ </reportSets>\r
+ </plugin>\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-javadoc-plugin</artifactId>\r
+ <configuration>\r
+ <source>1.5</source>\r
+ <encoding>UTF-8</encoding>\r
+ <docencoding>UTF-8</docencoding>\r
+ <charset>UTF-8</charset>\r
+ <links>\r
+ <link>http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/</link>\r
+ </links>\r
+ </configuration>\r
+ </plugin>\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-changelog-plugin</artifactId>\r
+ </plugin>\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-jxr-plugin</artifactId>\r
+ <configuration>\r
+ <inputEncoding>UTF-8</inputEncoding>\r
+ <outputEncoding>UTF-8</outputEncoding>\r
+ </configuration>\r
+ </plugin>\r
+ <plugin>\r
+ <groupId>org.codehaus.mojo</groupId>\r
+ <artifactId>taglist-maven-plugin</artifactId>\r
+ </plugin>\r
+ </plugins>\r
+ </reporting>\r
+</project>\r
--- /dev/null
+import java.applet.Applet;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+public class Back extends Applet implements MouseListener,MouseMotionListener,ActionListener{\r
+\r
+ Button button1,button2,button3,button4;\r
+\r
+ int X0=10,X1=125;\r
+ int Y0=55,Y1=70,Y2=160,Y3=240,Y4=305;\r
+\r
+ int RX0=30,RX1=60,RX2=210,RX3=260;\r
+ int RY0=225,RY1=240;\r
+\r
+ int WIDTH=7; //入力データの幅\r
+ int HEIGHT=11; //入力データの高さ\r
+ int INPUT=WIDTH*HEIGHT; //入力層の数(入力データ数)\r
+ int HIDDEN=16; //隠れ層の数\r
+ int PATTERN=10; //パターンの種類\r
+ int OUTPUT=PATTERN; //出力層の数(出力データ数)\r
+ int OUTER_CYCLES=200; //外部サイクル(一連のパターンの繰返し学習)の回数\r
+ int INNER_CYCLES=200; //内部サイクル(同一パターンの繰返し学習)の回数\r
+ float ALPHA=1.2f; //学習の加速係数\r
+ float BETA=1.2f; //シグモイド曲線の傾斜\r
+\r
+ int[] sample_in=new int[INPUT]; //学習用入力\r
+ int[] written_in=new int[INPUT]; //認識用手書き入力\r
+\r
+ float[][] weight_ih=new float[INPUT][HIDDEN]; //入力層と隠れ層の間の重み係数\r
+ float[] thresh_h=new float[HIDDEN]; //隠れ層の閾値\r
+ float[] hidden_out=new float[HIDDEN]; //隠れ層の出力\r
+\r
+ float[][] weight_ho=new float[HIDDEN][OUTPUT]; //隠れ層と出力層の間の重み係数\r
+ float[] thresh_o=new float[OUTPUT]; //出力層の閾値\r
+ float[] recog_out=new float[OUTPUT]; //認識出力(出力層の出力)\r
+\r
+ int[] teach=new int[PATTERN]; //教師信号\r
+\r
+\r
+\r
+\r
+\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,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 0,1,0,0,0,1,0,\r
+ 0,0,1,1,1,0,0},\r
+ \r
+ {0,0,0,1,0,0,0, //'1'\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0},\r
+ \r
+ {0,0,1,1,1,0,0, //'2'\r
+ 0,1,0,0,0,1,0,\r
+ 1,0,0,0,0,0,1,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,1,0,\r
+ 0,0,0,0,1,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,1,0,0,0,0,\r
+ 0,1,0,0,0,0,0,\r
+ 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,\r
+ 1,0,0,0,0,0,1,\r
+ 0,0,0,0,0,1,0,\r
+ 0,0,0,0,1,0,0,\r
+ 0,0,0,0,0,1,0,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 0,1,0,0,0,1,0,\r
+ 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,\r
+ 0,0,1,0,1,0,0,\r
+ 0,0,1,0,1,0,0,\r
+ 0,1,0,0,1,0,0,\r
+ 0,1,0,0,1,0,0,\r
+ 1,0,0,0,1,0,0,\r
+ 1,1,1,1,1,1,1,\r
+ 0,0,0,0,1,0,0,\r
+ 0,0,0,0,1,0,0,\r
+ 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,\r
+ 1,0,0,0,0,0,0,\r
+ 1,0,0,0,0,0,0,\r
+ 1,1,1,1,1,0,0,\r
+ 0,0,0,0,0,1,0,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,0,1,\r
+ 1,0,0,0,0,1,0,\r
+ 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,\r
+ 0,0,1,0,0,0,0,\r
+ 0,1,0,0,0,0,0,\r
+ 0,1,0,0,0,0,0,\r
+ 1,0,0,0,0,0,0,\r
+ 1,0,1,1,1,0,0,\r
+ 1,1,0,0,0,1,0,\r
+ 1,0,0,0,0,0,1,\r
+ 0,1,0,0,0,1,0,\r
+ 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,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,1,0,\r
+ 0,0,0,0,0,1,0,\r
+ 0,0,0,0,1,0,0,\r
+ 0,0,0,0,1,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,0,1,0,0,0,\r
+ 0,0,1,0,0,0,0,\r
+ 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,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 0,1,0,0,0,1,0,\r
+ 0,0,1,1,1,0,0,\r
+ 0,1,0,0,0,1,0,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 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,\r
+ 1,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 0,1,1,1,1,1,1,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,0,1,\r
+ 0,0,0,0,0,0,1,\r
+ 1,0,0,0,0,0,1,\r
+ 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
+\r
+\r
+ public void init(){\r
+\r
+ setBackground(Color.gray);\r
+\r
+ //ボタンの設定\r
+ add(button1=new Button(" 再学習 "));\r
+ add(button2=new Button(" 学習終了 "));\r
+ add(button3=new Button("入力クリヤ"));\r
+ add(button4=new Button(" 認 識 "));\r
+ button1.addActionListener(this);\r
+ button2.addActionListener(this);\r
+ button3.addActionListener(this);\r
+ button4.addActionListener(this);\r
+\r
+ //マウスの設定\r
+ addMouseListener(this);\r
+ addMouseMotionListener(this);\r
+\r
+ //教師信号の設定\r
+ for(int q=0;q<PATTERN;q++)\r
+ for(int k=0;k<OUTPUT;k++){\r
+ if(q==k) teach_array[q][k]=1;\r
+ else teach_array[q][k]=0;\r
+ }\r
+\r
+ //モードの初期設定\r
+ learning_flag=true;\r
+\r
+ }\r
+\r
+ //------------------- ボタン関係のメソッド ------------------\r
+\r
+ public void actionPerformed(ActionEvent ae){\r
+\r
+ if(ae.getSource()==button1){ //「再学習」\r
+ learning_flag=true;\r
+ repaint();\r
+ }\r
+ if(ae.getSource()==button2){ //「学習終了」\r
+ learning_flag=false;\r
+ repaint();\r
+ }\r
+ if(ae.getSource()==button3){ //「入力クリヤ」\r
+ if(!learning_flag)\r
+ repaint();\r
+ }\r
+ if(ae.getSource()==button4){ //「認識」\r
+ if(!learning_flag)\r
+ recognizeCharacter();\r
+ }\r
+\r
+ }\r
+\r
+ //---------- マウス関係のメソッド(手書き文字入力)----------\r
+\r
+ public void mousePressed(MouseEvent me){\r
+ int x=me.getX();\r
+ int y=me.getY();\r
+ if(!learning_flag && x>=RX1 && x<=RX1+WIDTH*10 && y>=RY1 && y<=RY1+HEIGHT*10){\r
+ x_old=me.getX();\r
+ y_old=me.getY();\r
+ written_in[(y_old-RY1)/10*WIDTH+(x_old-RX1)/10]=1;\r
+ }\r
+ }\r
+\r
+ public void mouseClicked(MouseEvent me){}\r
+ public void mouseEntered(MouseEvent me){}\r
+ public void mouseExited(MouseEvent me){}\r
+ public void mouseReleased(MouseEvent me){}\r
+\r
+ public void mouseDragged(MouseEvent me){\r
+ int x=me.getX();\r
+ int y=me.getY();\r
+ if(!learning_flag && x>=RX1 && x<=RX1+WIDTH*10 && y>=RY1 && y<=RY1+HEIGHT*10){\r
+ Graphics g=getGraphics(); \r
+ x_new=me.getX();\r
+ y_new=me.getY();\r
+ g.drawLine(x_old,y_old,x_new,y_new);\r
+ x_old=x_new;\r
+ y_old=y_new;\r
+ written_in[(y_old-RY1)/10*WIDTH+(x_old-RX1)/10]=1;\r
+ }\r
+ \r
+ }\r
+\r
+ public void mouseMoved(MouseEvent me){}\r
+ \r
+\r
+\r
+ //---------- 起動時およびrepaint()で呼び出されるメソッド ----------\r
+ \r
+ public void paint(Graphics g){\r
+\r
+ int i,j,k,p,q,r,x;\r
+\r
+ String string;\r
+\r
+ float outer_error; //外部サイクルエラー累計\r
+ float inner_error; //内部サイクルエラー累計\r
+ float temp_error; //隠れ層の誤差の累計 \r
+\r
+ //学習モードの背景\r
+ if(learning_flag){\r
+ g.setColor(new Color(255,255,192));\r
+ g.fillRect(5,35,590,460);\r
+ g.setColor(Color.black);\r
+ g.drawString("学習モード",500,55);\r
+ }\r
+\r
+ //認識モードの背景\r
+ else{\r
+ g.setColor(new Color(192,255,255));\r
+ g.fillRect(5,35,590,460);\r
+ g.setColor(Color.black);\r
+ g.drawString("認識モード",500,55);\r
+ }\r
+\r
+ //学習用パターンの表示\r
+ g.drawString("使用している学習用パターン",X0,Y0);\r
+ for(q=0;q<PATTERN;q++){\r
+ x=56*q;\r
+ for(j=0;j<HEIGHT;j++)\r
+ for(i=0;i<WIDTH;i++){\r
+ if(sample_array[q][WIDTH*j+i]==1) g.setColor(Color.red);\r
+ else g.setColor(Color.cyan);\r
+ g.fillRect(X0+x+6*i,Y1+6*j,5,5);\r
+ }\r
+ }\r
+ g.setColor(Color.black);\r
+\r
+ //-------------------------------------------------------------------\r
+ //--------------------------- 学習モード ----------------------------\r
+ //-------------------------------------------------------------------\r
+ if(learning_flag){\r
+\r
+ //閾値と重みの乱数設定\r
+ for(j=0;j<HIDDEN;j++){\r
+ thresh_h[j]=(float)Math.random()-0.5f;\r
+ for(i=0;i<INPUT;i++)\r
+ weight_ih[i][j]=(float)Math.random()-0.5f;\r
+ }\r
+ for(k=0;k<OUTPUT;k++){\r
+ thresh_o[k]=(float)Math.random()-0.5f;\r
+ for(j=0;j<HIDDEN;j++)\r
+ weight_ho[j][k]=(float)Math.random()-0.5f;\r
+ }\r
+\r
+ //-------------------------- 学習 --------------------------\r
+\r
+ for(p=0;p<OUTER_CYCLES;p++){ //外部サイクル\r
+\r
+ outer_error=0.0f; //外部二乗誤差のクリヤー\r
+\r
+ for(q=0;q<PATTERN;q++){ //パターンの切り替え\r
+\r
+ //パターンに対応した入力と教師信号の設定\r
+ sample_in=sample_array[q];\r
+ teach=teach_array[q];\r
+\r
+ for(r=0;r<INNER_CYCLES;r++){ //内部サイクル\r
+\r
+ //順方向演算\r
+ forwardNeuralNet(sample_in,recog_out); \r
+\r
+ //逆方向演算(バックプロパゲーション)\r
+ backwardNeuralNet();\r
+\r
+ }\r
+\r
+ //内部二乗誤差の計算\r
+ inner_error=0.0f; //内部二乗誤差のクリヤー\r
+ for(k=0;k<OUTPUT;k++)\r
+ inner_error+=(teach[k]-recog_out[k])*(teach[k]-recog_out[k]);\r
+\r
+ outer_error+=inner_error; //外部二乗誤差への累加算\r
+\r
+ }\r
+\r
+ //外部サイクルの回数と外部二乗誤差の表示\r
+ g.drawString("実行中の外部サイクルの回数と二乗誤差",X0,Y2);\r
+ g.setColor(new Color(255,255,192));\r
+ g.fillRect(X0+5,Y2+10,200,50); //以前の表示を消去\r
+ g.setColor(Color.black);\r
+ g.drawString("OuterCycles="+String.valueOf(p),X0+10,Y2+25);\r
+ g.drawString("TotalSquaredError="+String.valueOf(outer_error),X0+10,Y2+45);\r
+\r
+ } \r
+\r
+\r
+ //--------------------- 学習結果の確認 ---------------------\r
+\r
+ g.drawString("学習結果の確認",X0,Y3);\r
+ for(k=0;k<OUTPUT;k++){\r
+ g.drawString("Output",X1+45*k,Y3+25);\r
+ g.drawString(" ["+String.valueOf(k)+"]",X1+5+45*k,Y3+40);\r
+ } \r
+\r
+ for(q=0;q<PATTERN;q++){\r
+\r
+ //入力パターンの設定\r
+ sample_in=sample_array[q];\r
+\r
+ //順方向演算\r
+ forwardNeuralNet(sample_in,recog_out);\r
+\r
+ //結果の表示\r
+ g.setColor(Color.black);\r
+ g.drawString("TestPattern["+String.valueOf(q)+"]",X0+10,Y4+20*q);\r
+ for(k=0;k<OUTPUT;k++){\r
+ if(recog_out[k]>0.99){ //99% より大は、赤で YES と表示\r
+ g.setColor(Color.red);\r
+ string="YES";\r
+ }\r
+ else if(recog_out[k]<0.01){ // 1% より小は、青で NO と表示\r
+ g.setColor(Color.blue);\r
+ string="NO ";\r
+ }\r
+ else{ // 1% 以上 99% 以下は、黒で ? と表示\r
+ g.setColor(Color.black);\r
+ string=" ? ";\r
+ }\r
+ g.drawString(string,X1+10+45*k,Y4+20*q);\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+ //-------------------------------------------------------------------\r
+ //--------------------------- 認識モード ----------------------------\r
+ //-------------------------------------------------------------------\r
+ else{\r
+ g.setColor(Color.black);\r
+ g.drawString("マウスで数字を描いて下さい",RX0,RY0);\r
+ g.drawRect(RX1-1,RY1-1,WIDTH*10+2,HEIGHT*10+2); //外枠\r
+ g.setColor(Color.gray);\r
+ for(j=1;j<HEIGHT;j++)\r
+ g.drawLine(RX1,RY1+10*j,RX1+WIDTH*10,RY1+10*j); //横方向区切り\r
+ for(i=1;i<WIDTH;i++)\r
+ g.drawLine(RX1+10*i,RY1,RX1+10*i,RY1+HEIGHT*10); //縦方向区切り\r
+ for(i=0;i<INPUT;i++)\r
+ written_in[i]=0; //手書き入力データのクリヤ\r
+ }\r
+\r
+ }\r
+\r
+ //順方向演算のメソッド\r
+ public void forwardNeuralNet(int[] input,float[] output){\r
+\r
+ float[] out=new float[OUTPUT];\r
+ float[] hidden=new float[HIDDEN];\r
+\r
+ //隠れ層出力の計算\r
+ for(int j=0;j<HIDDEN;j++){\r
+ hidden[j]=-thresh_h[j];\r
+ for(int i=0;i<INPUT;i++)\r
+ hidden[j]+=input[i]*weight_ih[i][j];\r
+ hidden_out[j]=sigmoid(hidden[j]);\r
+ }\r
+\r
+ //出力層出力の計算\r
+ for(int k=0;k<OUTPUT;k++){\r
+ out[k]=-thresh_o[k];\r
+ for(int j=0;j<HIDDEN;j++)\r
+ out[k]+=hidden_out[j]*weight_ho[j][k];\r
+ output[k]=sigmoid(out[k]);\r
+ }\r
+\r
+ }\r
+\r
+ //逆方向演算のメソッド\r
+ public void backwardNeuralNet(){\r
+\r
+ int i,j,k;\r
+\r
+ float[] output_error=new float[OUTPUT]; //出力層の誤差\r
+ float[] hidden_error=new float[HIDDEN]; //隠れ層の誤差\r
+\r
+ float temp_error;\r
+\r
+ //出力層の誤差の計算\r
+ for(k=0;k<OUTPUT;k++)\r
+ output_error[k]=(teach[k]-recog_out[k])*recog_out[k]*(1.0f-recog_out[k]);\r
+\r
+ //隠れ層の誤差の計算\r
+ for(j=0;j<HIDDEN;j++){\r
+ temp_error=0.0f;\r
+ for(k=0;k<OUTPUT;k++)\r
+ temp_error+=output_error[k]*weight_ho[j][k];\r
+ hidden_error[j]=hidden_out[j]*(1.0f-hidden_out[j])*temp_error;\r
+ }\r
+\r
+ //重みの補正\r
+ for(k=0;k<OUTPUT;k++)\r
+ for(j=0;j<HIDDEN;j++)\r
+ weight_ho[j][k]+=ALPHA*output_error[k]*hidden_out[j];\r
+ for(j=0;j<HIDDEN;j++)\r
+ for(i=0;i<INPUT;i++)\r
+ weight_ih[i][j]+=ALPHA*hidden_error[j]*sample_in[i];\r
+\r
+ //閾値の補正\r
+ for(k=0;k<OUTPUT;k++)\r
+ thresh_o[k]-=ALPHA*output_error[k];\r
+ for(j=0;j<HIDDEN;j++)\r
+ thresh_h[j]-=ALPHA*hidden_error[j];\r
+\r
+ }\r
+ \r
+ //Sigmoid関数を計算するメソッド\r
+ public float sigmoid(float x){\r
+\r
+ return 1.0f/(1.0f+(float)Math.exp(-BETA*x));\r
+\r
+ }\r
+\r
+ //入力文字を認識するメソッド\r
+ public void recognizeCharacter(){\r
+\r
+ Graphics g=getGraphics();\r
+ String string;\r
+\r
+ //順方向演算\r
+ forwardNeuralNet(written_in,recog_out);\r
+\r
+ //結果の表示\r
+ for(int k=0;k<OUTPUT;k++){\r
+ g.setColor(Color.black);\r
+ g.drawString(String.valueOf(k)+"である",RX2,RY1+20*k);\r
+ if(recog_out[k]>0.8f) g.setColor(Color.red);\r
+ else g.setColor(Color.black);\r
+\r
+ g.fillRect(RX3,RY1-10+20*k,(int)(200*recog_out[k]),10);\r
+ g.drawString(String.valueOf((int)(100*recog_out[k]+0.5f))+"%",RX3+(int)(200*recog_out[k])+10,RY1+20*k);\r
+ }\r
+\r
+ }\r
+\r
+}\r
+\r
+\r
+\r
--- /dev/null
+\r
+CodeZineソフトウェア使用許諾\r
+\r
+本サイトよりダウンロードにて提供させていただいております、「プログラム」および「ソースコード」および「リソース」等(以下「本ソフトウェア」)は、それを作成した各著作権者がその著作権を有しております。ソフトウェアの中には著作権者自身が使用許諾を限定していることもありますので、まずはダウンロードしたファイル内の書類(典型的には「Readme.txt」ファイル)をよくお読みください。\r
+特に断りが無い場合は、翔泳社(以下「弊社」)が、以下の項目に基づき、使用を許諾させていただきます。\r
+\r
+以下の内容をご確認いただき、ご同意いただけましたら、「同意する」をクリックし、ダウンロードを行なってください。\r
+\r
+ 1. 本ソフトウェアは以下の目的で配布されています。\r
+ * 読者が記事を理解するにあたりその助けとなるための参考資料として\r
+ * 開発者が自身が開発するプロジェクトへ流用可能なソースコードとして\r
+ 2. 本ソフトウェアの著作権は各著作権者がその権利を保持しており、放棄はされていません。\r
+ 3. 本ソフトウェアのソースコードのテキスト部分は、目的が、ソフトウェア開発、もしくは、CodeZineの記事執筆であれば、著作権表示を明記すれば、一部、全部を問わず、自身が開発するプロジェクトへコピー、改変、流用していただいてかまいません。\r
+ 4. ソースコードを流用する際は、元のソースコードに記載された著作権表記を、流用先へそのまま記載するようにしてください。 ソースコードに著作権表記が無い場合は、CodeZineへのURL(http://codezine.jp/)をソースコードのどこかに記述してください。\r
+ 5. ソフトウェア開発以外の目的(教育等)については、ケースバイケースで判断させていただきますので、CodeZine編集部(support@codezine.jp)までご連絡ください。\r
+ 6. 本ソフトウェアのリソース部分(アイコンや画像、モデリングデータ等)については各著作権者が権利を保有し、使用を限定していることがあるので、それに従ってください。\r
+ 7. 弊社および各著作権者は、本ソフトウェアに関して、いかなる保証もサポートもバージョンアップ等も行ないません。\r
+ 8. 弊社および各著作権者への許諾無く第三者が本ソフトウェアをダウンロードしたそのままの形で再配布することはできません。\r
+ 9. 本ソフトウェアは自己責任でご使用ください。本ソフトウェアを使用したことにより発生した損害に関して、弊社および各著作権者はそのいかなる責任も負わないものとします。\r
+\r
--- /dev/null
+[InternetShortcut]\r
+URL=http://codezine.jp/a/article/aid/372.aspx\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+ This configuration file was written by the eclipse-cs plugin configuration editor\r
+-->\r
+<!--\r
+ Checkstyle-Configuration: u6k Checks\r
+ Description: none\r
+-->\r
+<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">\r
+<module name="Checker">\r
+ <property name="severity" value="warning"/>\r
+ <module name="TreeWalker">\r
+ <property name="tabWidth" value="4"/>\r
+ <module name="FileContentsHolder"/>\r
+ <module name="ModifierOrder"/>\r
+ <module name="RedundantModifier"/>\r
+ <module name="AvoidNestedBlocks"/>\r
+ <module name="EmptyBlock"/>\r
+ <module name="LeftCurly"/>\r
+ <module name="NeedBraces"/>\r
+ <module name="RightCurly"/>\r
+ <module name="AvoidInlineConditionals"/>\r
+ <module name="DoubleCheckedLocking"/>\r
+ <module name="EmptyStatement"/>\r
+ <module name="EqualsHashCode"/>\r
+ <module name="IllegalInstantiation"/>\r
+ <module name="InnerAssignment"/>\r
+ <module name="MissingSwitchDefault"/>\r
+ <module name="RedundantThrows"/>\r
+ <module name="SimplifyBooleanExpression"/>\r
+ <module name="SimplifyBooleanReturn"/>\r
+ <module name="DesignForExtension"/>\r
+ <module name="HideUtilityClassConstructor"/>\r
+ <module name="InterfaceIsType"/>\r
+ <module name="VisibilityModifier"/>\r
+ <module name="ArrayTypeStyle"/>\r
+ <module name="GenericIllegalRegexp">\r
+ <property name="format" value="\s+$"/>\r
+ <property name="ignoreComments" value="true"/>\r
+ <property name="message" value="Line has trailing spaces."/>\r
+ </module>\r
+ <module name="TodoComment"/>\r
+ <module name="UpperEll"/>\r
+ <module name="DefaultComesLast"/>\r
+ <module name="FallThrough"/>\r
+ <module name="IllegalCatch"/>\r
+ <module name="IllegalThrows"/>\r
+ <module name="ModifiedControlVariable"/>\r
+ <module name="RequireThis"/>\r
+ <module name="StringLiteralEquality"/>\r
+ <module name="FinalClass"/>\r
+ <module name="Indentation"/>\r
+ <module name="TrailingComment"/>\r
+ <module name="JavadocStyle">\r
+ <property name="checkFirstSentence" value="false"/>\r
+ </module>\r
+ <module name="JavadocType">\r
+ <property name="versionFormat" value="^\$Id:.*\$$"/>\r
+ </module>\r
+ <module name="JavadocVariable"/>\r
+ <module name="AbstractClassName"/>\r
+ <module name="ConstantName"/>\r
+ <module name="LocalFinalVariableName"/>\r
+ <module name="LocalVariableName"/>\r
+ <module name="MemberName"/>\r
+ <module name="MethodName"/>\r
+ <module name="PackageName"/>\r
+ <module name="ParameterName"/>\r
+ <module name="StaticVariableName"/>\r
+ <module name="TypeName"/>\r
+ <module name="Header">\r
+ <property name="headerFile" value="${basedir}/LICENSE.txt"/>\r
+ </module>\r
+ <module name="AvoidStarImport"/>\r
+ <module name="IllegalImport"/>\r
+ <module name="ImportOrder"/>\r
+ <module name="RedundantImport"/>\r
+ <module name="UnusedImports"/>\r
+ <module name="EmptyForInitializerPad"/>\r
+ <module name="EmptyForIteratorPad"/>\r
+ <module name="NoWhitespaceAfter"/>\r
+ <module name="NoWhitespaceBefore"/>\r
+ <module name="OperatorWrap"/>\r
+ <module name="MethodParamPad"/>\r
+ <module name="ParenPad"/>\r
+ <module name="TabCharacter"/>\r
+ <module name="TypecastParenPad">\r
+ <property name="tokens" value="RPAREN,TYPECAST"/>\r
+ </module>\r
+ <module name="WhitespaceAfter"/>\r
+ <module name="WhitespaceAround">\r
+ <property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND"/>\r
+ </module>\r
+ <module name="CovariantEquals"/>\r
+ <module name="DeclarationOrder"/>\r
+ <module name="ExplicitInitialization"/>\r
+ <module name="IllegalType">\r
+ <property name="tokens" value="METHOD_DEF,PARAMETER_DEF,VARIABLE_DEF"/>\r
+ </module>\r
+ <module name="JUnitTestCase"/>\r
+ <module name="MagicNumber"/>\r
+ <module name="MissingCtor"/>\r
+ <module name="MultipleVariableDeclarations"/>\r
+ <module name="PackageDeclaration"/>\r
+ <module name="MutableException"/>\r
+ <module name="JavadocMethod">\r
+ <property name="scope" value="package"/>\r
+ <property name="allowUndeclaredRTE" value="true"/>\r
+ </module>\r
+ </module>\r
+ <module name="NewlineAtEndOfFile">\r
+ <property name="lineSeparator" value="lf"/>\r
+ </module>\r
+ <module name="Translation"/>\r
+ <module name="PackageHtml"/>\r
+ <module name="SuppressionCommentFilter"/>\r
+</module>\r