| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using System;
- namespace NeuralNetworkPCL
- {
- class Neuron
- {
- double[] weights;
- int nbInputs;
-
- double output;
- internal double Output
- {
- get
- {
- return output;
- }
- }
- internal Neuron(int _nbInputs)
- {
- nbInputs = _nbInputs;
- output = Double.NaN;
- Random generator = new Random();
- weights = new double[(nbInputs + 1)];
- for (int i = 0; i < (nbInputs + 1); i++)
- {
- weights[i] = generator.NextDouble() * 2.0 - 1.0;
- }
- }
- internal double Evaluate(DataPoint _point)
- {
- double[] inputs = _point.Inputs;
- return Evaluate(inputs);
- }
- internal double Evaluate(double[] _inputs)
- {
- if (output.Equals(Double.NaN))
- {
- double x = 0.0;
- for (int i = 0; i < nbInputs; i++)
- {
- x += _inputs[i] * weights[i];
- }
- x += weights[nbInputs];
- output = 1.0 / (1.0 + Math.Exp(-1.0 * x));
- }
- return output;
- }
- internal void Clear()
- {
- output = Double.NaN;
- }
- internal double Weight(int index)
- {
- return weights[index];
- }
- internal void AdjustWeight(int index, double value)
- {
- weights[index] = value;
- }
- }
- }
|