public NeuralOutput Think(SensoryInput input) { for (var layer = 0; layer < Network.Layers.Length; ++layer) { for (var neuron = 0; neuron < Network.Layers[layer].Neurons.Length; neuron++) { if (layer == 0) { Network.Layers[layer].Neurons[neuron].Value = input.Values[neuron]; } else { Network.Layers[layer].Neurons[neuron].Value = 0; for (var dentrite = 0; dentrite < Network.Layers[layer - 1].Neurons.Length; ++dentrite) { Network.Layers[layer].Neurons[neuron].Value = Network.Layers[layer].Neurons[neuron].Value + Network.Layers[layer - 1].Neurons[dentrite] .Value * Network.Layers[layer].Neurons[neuron].Dendrite [dentrite].Weight; } Network.Layers[layer].Neurons[neuron].Value = MathUtilityHelper.HyperbolicTangent(Network.Layers[layer].Neurons[neuron].Value); } } } NeuralOutput output; output.Values = new double[Network.Layers[Network.Layers.Length - 1].Neurons.Length]; for (var neuron = 0; neuron < output.Values.Length; ++neuron) { output.Values[neuron] = Network.Layers[Network.Layers.Length - 1].Neurons[neuron].Value; // Mathf.Clamp((float) Network.Layers[Network.Layers.Length - 1].Neurons[neuron].Value, -1, 1); } return(output); }
public NeuralOutput Think(SensoryInput input) { for (var layer = 0; layer < Network.Layers.Length; ++layer) { for (var neuron = 0; neuron < Network.Layers[layer].Neurons.Length; neuron++) { if (layer == 0) Network.Layers[layer].Neurons[neuron].Value = input.Values[neuron]; else { Network.Layers[layer].Neurons[neuron].Value = 0; for (var dentrite = 0; dentrite < Network.Layers[layer - 1].Neurons.Length; ++dentrite) { Network.Layers[layer].Neurons[neuron].Value = Network.Layers[layer].Neurons[neuron].Value + Network.Layers[layer - 1].Neurons[dentrite] .Value* Network.Layers[layer].Neurons[neuron].Dendrite [dentrite].Weight; } Network.Layers[layer].Neurons[neuron].Value = MathUtilityHelper.HyperbolicTangent(Network.Layers[layer].Neurons[neuron].Value); } } } NeuralOutput output; output.Values = new double[Network.Layers[Network.Layers.Length - 1].Neurons.Length]; for (var neuron = 0; neuron < output.Values.Length; ++neuron) { output.Values[neuron] = Network.Layers[Network.Layers.Length - 1].Neurons[neuron].Value; // Mathf.Clamp((float) Network.Layers[Network.Layers.Length - 1].Neurons[neuron].Value, -1, 1); } return output; }