@@ -14,29 +14,32 @@ protected NeuralNetwork(NeuralNetwork network) {
14
14
for ( int l = 0 ; l < neurons . Length ; l ++ ) {
15
15
neurons [ l ] = new Neuron [ network . neurons [ l ] . Length ] ;
16
16
for ( int n = 0 ; n < neurons [ l ] . Length ; n ++ ) {
17
- neurons [ l ] [ n ] = new Neuron ( network . neurons [ l ] [ n ] . CloneWeights ( ) ) ;
17
+ double [ ] clonedWeights = network . neurons [ l ] [ n ] . CloneWeights ( ) ;
18
+ // Debug.WriteLine("Cloned weight count: {0} vs {1}", network.neurons[l][n].GetWeightSize(), clonedWeights.Length);
19
+ neurons [ l ] [ n ] = new Neuron ( clonedWeights ) ;
18
20
}
19
21
}
20
22
}
21
23
22
24
public NeuralNetwork ( int inputCountTempShim , int [ ] neuralCounts ) {
23
- ulong inputCount = ( ulong ) inputCountTempShim ;
25
+ ulong inputCount = ( ulong ) ( inputCountTempShim ) ;
26
+ // Debug.WriteLine("inputCount = {0}", inputCount);
24
27
if ( neuralCounts . Length < 1 ) { throw new Exception ( ) ; }
25
28
neurons = new Neuron [ neuralCounts . Length ] [ ] ;
26
29
neurons [ 0 ] = new Neuron [ neuralCounts [ 0 ] ] ;
27
- Debug . WriteLine ( "Creating input neurons..." ) ;
30
+ // Debug.WriteLine("Creating input neurons...");
28
31
for ( int n = 0 ; n < neurons [ 0 ] . Length ; n ++ ) {
29
32
neurons [ 0 ] [ n ] = new Neuron ( GetInactiveNeuronWeights ( inputCount + 1 ) ) ;
30
33
}
31
- Debug . WriteLine ( "Creating other neurons..." ) ;
34
+ // Debug.WriteLine("Creating other neurons...");
32
35
for ( int l = 1 ; l < neuralCounts . Length ; l ++ ) {
33
36
neurons [ l ] = new Neuron [ neuralCounts [ l ] ] ;
34
37
for ( int n = 0 ; n < neurons [ l ] . Length ; n ++ ) {
35
- double [ ] weights = GetInactiveNeuronWeights ( ( ulong ) neurons [ l - 1 ] . Length + 1 ) ;
38
+ double [ ] weights = GetInactiveNeuronWeights ( ( ulong ) ( neurons [ l - 1 ] . Length ) + 1 ) ;
36
39
neurons [ l ] [ n ] = new Neuron ( weights ) ;
37
40
}
38
41
}
39
- Debug . WriteLine ( "Created neurons." ) ;
42
+ // Debug.WriteLine("Created neurons.");
40
43
}
41
44
42
45
public int LayerCount {
@@ -54,9 +57,9 @@ public double GetInactiveNeuronInputWeight() {
54
57
public void RandomizeWeights ( Random random , double min = 0 , double max = 1 ) {
55
58
for ( int l = 0 ; l < neurons . Length ; l ++ ) {
56
59
for ( int n = 0 ; n < neurons [ l ] . Length ; n ++ ) {
57
- Debug . WriteLine ( "Randomizing weight (layer: {0}, neuron: {1})" , l , n ) ;
60
+ // Debug.WriteLine("Randomizing weight (layer: {0}, neuron: {1})", l, n);
58
61
for ( ulong w = 0 ; w < neurons [ l ] [ n ] . GetWeightSize ( ) ; w ++ ) {
59
- Debug . WriteLine ( "Randomizing weight (layer: {0}, neuron: {1}, weight: {2})" , l , n , w ) ;
62
+ // Debug.WriteLine("Randomizing weight (layer: {0}, neuron: {1}, weight: {2})", l, n, w);
60
63
neurons [ l ] [ n ] . SetWeight ( w , min + random . NextDouble ( ) * ( max - min ) ) ;
61
64
}
62
65
}
@@ -81,6 +84,7 @@ public double[] Classify(double[] inputs) {
81
84
public double [ ] [ ] CalculateAllOutputs ( double [ ] inputs ) {
82
85
double [ ] [ ] outputs = new double [ neurons . Length ] [ ] ;
83
86
outputs [ 0 ] = new double [ neurons [ 0 ] . Length ] ;
87
+ // Debug.WriteLine("[" + string.Join(", ", inputs) + "]");
84
88
for ( int n = 0 ; n < neurons [ 0 ] . Length ; n ++ ) {
85
89
outputs [ 0 ] [ n ] = neurons [ 0 ] [ n ] . GetOutput ( inputs ) ;
86
90
}
@@ -102,7 +106,7 @@ public int GetNeuronCount(int layerIndex) {
102
106
/// </summary>
103
107
public void InsertAfterLayer ( int layerIndex ) {
104
108
Neuron [ ] layer = new Neuron [ neurons [ layerIndex ] . Length ] ;
105
- for ( ulong n = 0 ; n < ( ulong ) layer . Length ; n ++ ) {
109
+ for ( ulong n = 0 ; n < ( ulong ) ( layer . Length ) ; n ++ ) {
106
110
double [ ] inputWeights = new double [ neurons [ layerIndex ] . Length + 1 ] ;
107
111
108
112
Neuron newNeuron = new Neuron ( inputWeights ) ;
@@ -184,13 +188,13 @@ public void AddNonOutputNeuron(int layerIndex, Neuron neuron, double[] outputWei
184
188
/// This effectively adds a neuron without causing the network's behaviour/outputs to change.
185
189
/// </summary>
186
190
public void SplitNeuronNonDestructive ( int layerIndex , int neuronIndexCSharp ) {
187
- ulong neuronIndex = ( ulong ) neuronIndexCSharp ;
191
+ ulong neuronIndex = ( ulong ) ( neuronIndexCSharp ) ;
188
192
Neuron duplicatedNeuron = new Neuron ( neurons [ layerIndex ] [ neuronIndex ] . CloneWeights ( ) ) ;
189
193
if ( layerIndex == neurons . Length - 1 ) {
190
194
AddOutputNeuron ( duplicatedNeuron ) ;
191
195
} else {
192
196
double [ ] outputWeights = new double [ neurons [ layerIndex + 1 ] . Length ] ;
193
- for ( ulong n2 = 0 ; n2 < ( ulong ) neurons [ layerIndex + 1 ] . Length ; n2 ++ ) {
197
+ for ( ulong n2 = 0 ; n2 < ( ulong ) ( neurons [ layerIndex + 1 ] . Length ) ; n2 ++ ) {
194
198
double halvedWeight = neurons [ layerIndex + 1 ] [ n2 ] . GetNeuronWeight ( neuronIndex ) ;
195
199
outputWeights [ n2 ] = halvedWeight ;
196
200
neurons [ layerIndex + 1 ] [ n2 ] . SetNeuronWeight ( neuronIndex , halvedWeight ) ;
0 commit comments