<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
backgroundColor="#FFFFFF"
backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#FFFFFF, #FFFFFF]"
viewSourceURL="srcview/index.html" width="397" height="411">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import com.adm.nnetwork.TrainingResult;
import com.adm.nnetwork.TrainingPattern;
import com.adm.nnetwork.NNetwork;
private var network : NNetwork;
[Bindable]
private var memory : ByteArray;
[Bindable]
private var created : Boolean = false
private function create() : void {
var inputNeurons : int = 2;
var outputNeurons : int = 1;
var hiddenNeuronsPerLayer : int = 3;
var hiddenLayers : int = 2;
var neuronalBias : Number = 1;
var initialWeightRange : Number = 1;
this.network = new NNetwork();
this.network.create(inputNeurons, outputNeurons, hiddenNeuronsPerLayer, hiddenLayers, neuronalBias, initialWeightRange);
startMSE.text = "0";
endMSE.text = "0";
executionTime.text = "0ms";
epochs.text = "0";
this.created = true;
}
private function trainNetwork() : void {
var patterns : Array = [];
patterns.push(new TrainingPattern("00","0"));
patterns.push(new TrainingPattern("01","1"));
patterns.push(new TrainingPattern("11","0"));
patterns.push(new TrainingPattern("10","1"));
var epochsToRun : int = 10000;
var learningRate : Number = 1;
var result : TrainingResult = this.network.quickTrain(epochsToRun, learningRate, patterns);
startMSE.text = result.startMSE.toString();
endMSE.text = result.endMSE.toString();
executionTime.text = result.executionTime.toString() + "ms";
epochs.text = result.epochs.toString();
}
private function run() : void {
var startTime : Date = new Date();
var result : Array = this.network.run(inputpattern.text.split(""));
this.outvalue.text = result.join();
this.interpretvalue.text = this.network.interpret(result).join();
this.execTime.text = (new Date().time - startTime.time).toString() + "ms";
}
private function save() : void {
memory = network.saveMemorySnapshot();
}
private function load() : void {
this.network = new NNetwork(); if (this.network.loadMemorySnapshot(memory)) {
this.created = true;
} else Alert.show("Failed to load memory snapshot from file");
this.memory = null;
}
]]>
</mx:Script>
<mx:Button x="10" y="10" label="Create New Network" width="180" click="create()" />
<mx:Button x="198" y="10" label="Load Saved Snapshot" width="188" click="load()" enabled="{memory != null}" />
<mx:Canvas x="10" y="36" width="376" height="156" borderStyle="solid">
<mx:Label x="10" y="10" text="Train network" fontWeight="bold"/>
<mx:Label x="10" y="36" text="Start MSE:"/>
<mx:Label x="113" y="36" text="0" fontWeight="bold" id="startMSE"/>
<mx:Label x="10" y="62" text="End MSE:"/>
<mx:Label x="113" y="62" text="0" fontWeight="bold" id="endMSE"/>
<mx:Label x="10" y="88" text="Execution Time:"/>
<mx:Label x="113" y="88" text="0" fontWeight="bold" id="executionTime"/>
<mx:Label x="10" y="114" text="Epochs:"/>
<mx:Label x="113" y="114" text="0" fontWeight="bold" id="epochs"/>
<mx:Label x="178" y="36" text="Learn Patterns:"/>
<mx:Text x="277" y="36" htmlText="00 => 0<br>01 => 1<br>10 => 1<br>11 => 0"/>
<mx:Button x="249" y="112" label="Train" click="trainNetwork()" enabled="{this.created}" />
</mx:Canvas>
<mx:Canvas x="10" y="200" width="376" height="145" borderStyle="solid">
<mx:Label x="10" y="10" text="Test network" fontWeight="bold"/>
<mx:Label x="10" y="36" text="Input pattern (binary string):"/>
<mx:TextInput x="185" y="34" id="inputpattern" maxChars="2" width="56"/>
<mx:Label x="10" y="62" text="Value:"/>
<mx:Label x="10" y="88" text="Interpretable:"/>
<mx:Label x="185" y="62" fontWeight="bold" id="outvalue"/>
<mx:Label x="185" y="88" fontWeight="bold" id="interpretvalue"/>
<mx:Button x="249" y="34" label="Run" width="105" click="run()" enabled="{this.created}" />
<mx:Label x="10" y="114" text="Execution Time:"/>
<mx:Label x="185" y="114" text="0" fontWeight="bold" id="execTime" />
</mx:Canvas>
<mx:Button x="10" y="353" label="Save Network Snapshot" width="376" click="save()" enabled="{this.created}" />
<mx:Label x="10" y="383" text="Saved Network Snapshot Size : "/>
<mx:Label x="198" y="383" text="{memory != null ? memory.bytesAvailable.toString() : '0' } bytes" fontWeight="bold" id="memorySize"/>
</mx:Application>