Advertisement
Hexadroid

Example

May 15th, 2020
1,743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.81 KB | None | 0 0
  1. #pragma hdrstop
  2. #pragma argsused
  3.  
  4. #ifdef _WIN32
  5. #include <tchar.h>
  6. #else
  7.   typedef char _TCHAR;
  8.   #define _tmain main
  9. #endif
  10.  
  11. #include <algorithm>
  12. #include <stdio.h>
  13. #include <math.h>
  14. #include <iostream>
  15.  
  16. using std::cin;
  17. using std::cout;
  18. using std::endl;
  19.  
  20. double SigmoidPart1, SigmoidPart2, SigmoidPart3, SigmoidPart4;
  21. double Sigmoid_DerivativePart1, Sigmoid_DerivativePart2, Sigmoid_DerivativePart3, Sigmoid_DerivativePart4;
  22. double ErrorPart1, ErrorPart2, ErrorPart3, ErrorPart4;
  23. double AdjustmentPart1, AdjustmentPart2, AdjustmentPart3, AdjustmentPart4;
  24.  
  25.  int _tmain(int argc, _TCHAR* argv[])
  26. {
  27.     double training_set_inputs[4][3];
  28.     double training_set_outputs[4];
  29.     double SynapticWeight[3], new_situation[3];
  30.     double i,j,l, Output1, Output2, Output3, Output4, Output5, DOToutput1, DOToutput2, DOToutput3, DOToutput4, DOToutput5, AdjustSynapticWeight_0, AdjustSynapticWeight_1, AdjustSynapticWeight_2;
  31.  
  32.     training_set_inputs[0][0]=0;training_set_inputs[0][1]=0;training_set_inputs[0][2]=1;
  33.     training_set_inputs[1][0]=1;training_set_inputs[1][1]=1;training_set_inputs[1][2]=1;
  34.     training_set_inputs[2][0]=1;training_set_inputs[2][1]=0;training_set_inputs[2][2]=1;
  35.     training_set_inputs[3][0]=0;training_set_inputs[3][1]=1;training_set_inputs[3][2]=1;
  36.  
  37.     training_set_outputs[0]=0;
  38.     training_set_outputs[1]=1;
  39.     training_set_outputs[2]=1;
  40.     training_set_outputs[3]=0;
  41.  
  42.  
  43.  
  44.     // Should be a random number between -1 and +1 ; fixed values b/c of example.
  45.     SynapticWeight[0]=-0.16595599;
  46.     SynapticWeight[1]=0.44064899;
  47.     SynapticWeight[2]=-0.99977125;
  48.  
  49.  
  50.     for( i = 1; i < 10000; i++ ){
  51.  
  52.         Output1 = training_set_inputs[0][0]*SynapticWeight[0]+training_set_inputs[0][1]*SynapticWeight[1]+training_set_inputs[0][2]*SynapticWeight[2];
  53.         Output2 = training_set_inputs[1][0]*SynapticWeight[0]+training_set_inputs[1][1]*SynapticWeight[1]+training_set_inputs[1][2]*SynapticWeight[2];
  54.         Output3 = training_set_inputs[2][0]*SynapticWeight[0]+training_set_inputs[2][1]*SynapticWeight[1]+training_set_inputs[2][2]*SynapticWeight[2];
  55.         Output4 = training_set_inputs[3][0]*SynapticWeight[0]+training_set_inputs[3][1]*SynapticWeight[1]+training_set_inputs[3][2]*SynapticWeight[2];
  56.  
  57.  
  58.         // one part for each set, the whole thing needs to be simplified.
  59.         SigmoidPart1 = 1 / (1 + exp(-(Output1)));
  60.         SigmoidPart2 = 1 / (1 + exp(-(Output2)));
  61.         SigmoidPart3 = 1 / (1 + exp(-(Output3)));
  62.         SigmoidPart4 = 1 / (1 + exp(-(Output4)));
  63.  
  64.         Sigmoid_DerivativePart1 = SigmoidPart1 * (1 - SigmoidPart1);
  65.         Sigmoid_DerivativePart2 = SigmoidPart2 * (1 - SigmoidPart2);
  66.         Sigmoid_DerivativePart3 = SigmoidPart3 * (1 - SigmoidPart3);
  67.         Sigmoid_DerivativePart4 = SigmoidPart4 * (1 - SigmoidPart4);
  68.  
  69.         ErrorPart1 = (training_set_outputs[0] - SigmoidPart1);
  70.         ErrorPart2 = (training_set_outputs[1] - SigmoidPart2);
  71.         ErrorPart3 = (training_set_outputs[2] - SigmoidPart3);
  72.         ErrorPart4 = (training_set_outputs[3] - SigmoidPart4);
  73.  
  74.         AdjustmentPart1 =  ErrorPart1 * Sigmoid_DerivativePart1;
  75.         AdjustmentPart2 =  ErrorPart2 * Sigmoid_DerivativePart2;
  76.         AdjustmentPart3 =  ErrorPart3 * Sigmoid_DerivativePart3;
  77.         AdjustmentPart4 =  ErrorPart4 * Sigmoid_DerivativePart4;
  78.  
  79.         AdjustSynapticWeight_0 = training_set_inputs[0][0]*AdjustmentPart1+training_set_inputs[1][0]*AdjustmentPart2+training_set_inputs[2][0]*AdjustmentPart3+training_set_inputs[3][0]*AdjustmentPart4;
  80.         AdjustSynapticWeight_1 = training_set_inputs[0][1]*AdjustmentPart1+training_set_inputs[1][1]*AdjustmentPart2+training_set_inputs[2][1]*AdjustmentPart3+training_set_inputs[3][1]*AdjustmentPart4;
  81.         AdjustSynapticWeight_2 = training_set_inputs[0][2]*AdjustmentPart1+training_set_inputs[1][2]*AdjustmentPart2+training_set_inputs[2][2]*AdjustmentPart3+training_set_inputs[3][2]*AdjustmentPart4;
  82.  
  83.         SynapticWeight[0]=SynapticWeight[0]+AdjustSynapticWeight_0;
  84.         SynapticWeight[1]=SynapticWeight[1]+AdjustSynapticWeight_1;
  85.         SynapticWeight[2]=SynapticWeight[2]+AdjustSynapticWeight_2;
  86.  
  87.        printf("\nTEST %.14f %.14f %.14f ADJ %.14f %.14f %.14f", SynapticWeight[0], SynapticWeight[1], SynapticWeight[2], AdjustSynapticWeight_0, AdjustSynapticWeight_1, AdjustSynapticWeight_2);
  88.     }
  89.  
  90.     new_situation[0]=1;new_situation[1]=0;new_situation[2]=0;
  91.  
  92.     Output5=new_situation[0]*SynapticWeight[0]+new_situation[1]*SynapticWeight[1]+new_situation[2]*SynapticWeight[2];
  93.  
  94.     DOToutput5 = 1 / (1 + exp(-(Output5)));
  95.  
  96.     printf("\nsemidebug i: %lf", i);
  97.     printf("\nsemidebug training_set_inputs[3][0]: %lf", training_set_inputs[3][0]);
  98.     printf("\nsemidebug training_set_outputs[3]: %lf", training_set_outputs[3] );
  99.  
  100.     printf("\n The output is currently %lf \n", DOToutput5);
  101.  
  102.  
  103.  
  104.  
  105.  
  106.     cout << "Press enter to exit..." << endl;
  107.     cin.get();
  108.  
  109.  
  110.  
  111.  
  112.  
  113.     return 0;
  114. }
  115.  
  116. // ref:   medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1
  117. // A.I. / Neural Network crude example
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement