Program.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using Encog;
  2. using Encog.Engine.Network.Activation;
  3. using Encog.ML.Data;
  4. using Encog.ML.Data.Basic;
  5. using Encog.ML.Train;
  6. using Encog.Neural.Networks;
  7. using Encog.Neural.Networks.Layers;
  8. using Encog.Neural.Networks.Training.Propagation.Resilient;
  9. using System;
  10. namespace Bitswap
  11. {
  12. class Program
  13. {
  14. /// <summary>
  15. /// input for the bitswap function
  16. /// </summary>
  17. public static double[][] BitswapInput =
  18. {
  19. new[] { 0d, 0d },
  20. new[] { 0d, 1d },
  21. new[] { 1d, 0d },
  22. new[] { 1d, 1d }
  23. };
  24. /// <summary>
  25. /// ideal output for the bitswap function
  26. /// </summary>
  27. public static double[][] BitswapIdeal =
  28. {
  29. new[] { 0d, 0d },
  30. new[] { 1d, 0d },
  31. new[] { 0d, 1d },
  32. new[] { 1d, 1d }
  33. };
  34. static void Main(string[] args)
  35. {
  36. // create nework
  37. var network = new BasicNetwork();
  38. // input layer network.AddLayer(new BasicLayer(null, true, 2));
  39. // hidden layer
  40. network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 3));
  41. // output layer
  42. network.AddLayer(new BasicLayer(new ActivationSigmoid(), false, 2));
  43. network.Structure.FinalizeStructure();
  44. network.Reset();
  45. // create training data
  46. IMLDataSet trainingData = new BasicMLDataSet(BitswapInput, BitswapIdeal);
  47. // train the network
  48. IMLTrain train = new ResilientPropagation(network, trainingData);
  49. int epoch = 1;
  50. do
  51. {
  52. train.Iteration();
  53. Console.WriteLine($@"epoch #{epoch} error: {train.Error}");
  54. epoch++;
  55. } while (train.Error > 0.01);
  56. train.FinishTraining();
  57. // test the network
  58. Console.WriteLine(@"neural network results:");
  59. foreach (var pair in trainingData)
  60. {
  61. IMLData output = network.Compute(pair.Input);
  62. Console.WriteLine($@"input: [{pair.Input[0]}, {pair.Input[1]}], computation result: [{Math.Round(output[0], 2)}; {Math.Round(output[1], 2)}], ideal: {pair.Ideal}");
  63. }
  64. EncogFramework.Instance.Shutdown();
  65. Console.ReadKey();
  66. }
  67. }
  68. }