Fix calculating the weight average

This commit is contained in:
Pascal Serrarens 2026-08-17 11:49:42 +02:00
parent e96347a7b2
commit 120e705157
3 changed files with 38 additions and 4 deletions

View File

@ -966,6 +966,20 @@ namespace NanoBrain {
}
}
public void ProcessWeights(Func<float, float> processor) {
if (processor is null)
throw new ArgumentNullException(nameof(processor));
int thisNucleiCount = this.nuclei.Count;
for (int i = 0; i < thisNucleiCount; i++) {
if (this.nuclei[i] is Neuron thisNeuron) {
thisNeuron.ProcessWeight(processor);
}
}
}
#region Receivers
/// <summary>

View File

@ -346,6 +346,17 @@ namespace NanoBrain {
thisSynapse.weight = processor(thisSynapse.weight, sourceSynapse.weight);
}
}
}
public void ProcessWeight(Func<float, float> processor) {
int thisSynapseCount = this.synapses.Count;
for (int i = 0; i < thisSynapseCount; i++) {
Synapse thisSynapse = this.synapses[i];
if (thisSynapse.trainable) {
thisSynapse.weight = processor(thisSynapse.weight);
}
}
}

View File

@ -56,11 +56,15 @@ namespace NanoBrain {
return null;
Cluster result = members[0].brain.Copy();
// for (int memberIx = 1; memberIx < members.Count; memberIx++) {
// Member member = members[memberIx];
// result.ProcessWeightsFrom(member.brain, Average);
// }
for (int memberIx = 1; memberIx < members.Count; memberIx++) {
// Debug.Log($"{((Neuron)result.nuclei[0]).synapses[0].weight}");
Member member = members[memberIx];
result.ProcessWeightsFrom(member.brain, Sum);
}
// Debug.Log($"R {((Neuron)result.nuclei[0]).synapses[0].weight}");
result.ProcessWeights(w => w / members.Count);
// Debug.Log($"A {((Neuron)result.nuclei[0]).synapses[0].weight}");
return result;
}
@ -136,6 +140,11 @@ namespace NanoBrain {
return (a + b) / 2;
}
private static float Sum(float a, float b) {
return a + b;
}
protected List<Member> GenerateRandom() {
return GenerateRandom(int.MaxValue);
}