Simplify weight training by using 1D in the right way
This commit is contained in:
parent
10e1dd0126
commit
88114cc048
@ -668,7 +668,7 @@ namespace NanoBrain {
|
|||||||
|
|
||||||
public void BackPropagation1D(float derivative, float learningRate) {
|
public void BackPropagation1D(float derivative, float learningRate) {
|
||||||
foreach (Synapse synapse in this.synapses)
|
foreach (Synapse synapse in this.synapses)
|
||||||
synapse.BackPropagation(this, derivative, learningRate);
|
synapse.BackPropagation(this, derivative, learningRate);
|
||||||
|
|
||||||
// Bias
|
// Bias
|
||||||
if (this.trainable) {
|
if (this.trainable) {
|
||||||
@ -689,7 +689,14 @@ namespace NanoBrain {
|
|||||||
|
|
||||||
public void BackPropagation3D(Vector3 derivative, float learningRate) {
|
public void BackPropagation3D(Vector3 derivative, float learningRate) {
|
||||||
foreach (Synapse synapse in this.synapses)
|
foreach (Synapse synapse in this.synapses)
|
||||||
synapse.BackPropagation(this, derivative, learningRate);
|
// synapse.BackPropagation(this, derivative, learningRate);
|
||||||
|
// As the weight cannot change the direction of the derivative
|
||||||
|
// we can use the simpler, 1D backpropagation here
|
||||||
|
// But we still need to determine the sign of the derivative
|
||||||
|
if (Synapse.AreOpposed(derivative, synapse.neuron.activation))
|
||||||
|
synapse.BackPropagation(this, -derivative.magnitude, learningRate);
|
||||||
|
else
|
||||||
|
synapse.BackPropagation(this, derivative.magnitude, learningRate);
|
||||||
|
|
||||||
// Bias
|
// Bias
|
||||||
if (this.trainable) {
|
if (this.trainable) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user