Neuron.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System;
  2. namespace NeuralNetworkPCL
  3. {
  4. class Neuron
  5. {
  6. double[] weights;
  7. int nbInputs;
  8. double output;
  9. internal double Output
  10. {
  11. get
  12. {
  13. return output;
  14. }
  15. }
  16. internal Neuron(int _nbInputs)
  17. {
  18. nbInputs = _nbInputs;
  19. output = Double.NaN;
  20. Random generator = new Random();
  21. weights = new double[(nbInputs + 1)];
  22. for (int i = 0; i < (nbInputs + 1); i++)
  23. {
  24. weights[i] = generator.NextDouble() * 2.0 - 1.0;
  25. }
  26. }
  27. internal double Evaluate(DataPoint _point)
  28. {
  29. double[] inputs = _point.Inputs;
  30. return Evaluate(inputs);
  31. }
  32. internal double Evaluate(double[] _inputs)
  33. {
  34. if (output.Equals(Double.NaN))
  35. {
  36. double x = 0.0;
  37. for (int i = 0; i < nbInputs; i++)
  38. {
  39. x += _inputs[i] * weights[i];
  40. }
  41. x += weights[nbInputs];
  42. output = 1.0 / (1.0 + Math.Exp(-1.0 * x));
  43. }
  44. return output;
  45. }
  46. internal void Clear()
  47. {
  48. output = Double.NaN;
  49. }
  50. internal double Weight(int index)
  51. {
  52. return weights[index];
  53. }
  54. internal void AdjustWeight(int index, double value)
  55. {
  56. weights[index] = value;
  57. }
  58. }
  59. }