home *** CD-ROM | disk | FTP | other *** search
/ Robotics & Artificial Int…3 (Professional Edition) / Robotics & Artificial Intelligence Tools 2003 (Professional Edition).iso / neural network tool and application / nsinstall.exe / data1.cab / Demos_Files / Code_Generation / xorTraining.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2002-03-08  |  7.8 KB  |  196 lines

  1. // xorTraining.cpp
  2. // Automatically generated from breadboard by NeuroSolutions.
  3.  
  4. #include "NSLib.h" 
  5.  
  6.  
  7. void saveAllWeights(char *weightsFilePath);
  8. BOOL networkStopped=FALSE;
  9. unsigned short int weightFileVersion=225;
  10. BOOL forceBackpropLearning=FALSE, backpropLearningOn=TRUE;
  11.  
  12. // Component Construction
  13. Axon inputAxon;
  14. File inputFile;
  15. BackAxon inputAxonBackprop;
  16. FullSynapse hidden1Synapse;
  17. BackFullSynapse hidden1SynapseBackprop;
  18. Momentum hidden1SynapseBackpropGradient;
  19. TanhAxon hidden1Axon;
  20. BackTanhAxon hidden1AxonBackprop;
  21. Momentum hidden1AxonBackpropGradient;
  22. FullSynapse outputSynapse;
  23. BackFullSynapse outputSynapseBackprop;
  24. Momentum outputSynapseBackpropGradient;
  25. TanhAxon outputAxon;
  26. BackTanhAxon outputAxonBackprop;
  27. Momentum outputAxonBackpropGradient;
  28. L2Criterion criterion;
  29. BackCriteriaControl criterionBackprop;
  30. File desiredFile;
  31. File activeCostProbe;
  32.  
  33. int main() {
  34.     srand((unsigned)time(NULL));
  35.  
  36.     // Component Initialization
  37.     inputAxon.setRows(2);
  38.     inputFile.setFilePath("inputFile.bin");
  39.     inputFile.setMode(READ,BINARY);
  40.     inputFile.setSpatialDimension(2,1);
  41.     inputAxonBackprop.setRows(2);
  42.     hidden1SynapseBackpropGradient.setDefaultMomentum(6.999999880790710e-001f);
  43.     hidden1SynapseBackpropGradient.setDefaultStepSize(3.000000119209290e-001f);
  44.     hidden1SynapseBackpropGradient.setIndividualSteps(FALSE);
  45.     hidden1SynapseBackpropGradient.setStepDivisor(4);
  46.     hidden1Axon.setRows(2);
  47.     hidden1AxonBackprop.setOffset(1.000000047497451e-003f);
  48.     hidden1AxonBackprop.setRows(2);
  49.     hidden1AxonBackpropGradient.setDefaultMomentum(6.999999880790710e-001f);
  50.     hidden1AxonBackpropGradient.setDefaultStepSize(3.000000119209290e-001f);
  51.     hidden1AxonBackpropGradient.setIndividualSteps(FALSE);
  52.     hidden1AxonBackpropGradient.setStepDivisor(4);
  53.     outputSynapseBackpropGradient.setDefaultMomentum(6.999999880790710e-001f);
  54.     outputSynapseBackpropGradient.setDefaultStepSize(3.000000119209290e-001f);
  55.     outputSynapseBackpropGradient.setIndividualSteps(FALSE);
  56.     outputSynapseBackpropGradient.setStepDivisor(4);
  57.     outputAxon.setRows(1);
  58.     outputAxonBackprop.setOffset(1.000000047497451e-003f);
  59.     outputAxonBackprop.setRows(1);
  60.     outputAxonBackpropGradient.setDefaultMomentum(6.999999880790710e-001f);
  61.     outputAxonBackpropGradient.setDefaultStepSize(3.000000119209290e-001f);
  62.     outputAxonBackpropGradient.setIndividualSteps(FALSE);
  63.     outputAxonBackpropGradient.setStepDivisor(4);
  64.     criterion.setRows(1);
  65.     criterionBackprop.setRows(1);
  66.     desiredFile.setFilePath("desiredFile.bin");
  67.     desiredFile.setMode(READ,BINARY);
  68.     desiredFile.setSpatialDimension(1,1);
  69.     activeCostProbe.setMode(WRITE,STANDARD);
  70.     activeCostProbe.setSpatialDimension(1,1);
  71.     FILE *loadStream = fopen("xorTraining.nsw","r");
  72.     if (!loadStream) {
  73.         fprintf(stderr, "Could not open weight file xorTraining.nsw");
  74.         exit(1);
  75.     }
  76.     weightFileVersion = getWeightFileVersion(loadStream);
  77.     
  78.     // Load Normalization Coefficients of Files
  79.     inputFile.loadWeights(seekComponent(loadStream, "File", "inputFile"),weightFileVersion);
  80.     desiredFile.loadWeights(seekComponent(loadStream, "File", "desiredFile"),weightFileVersion);
  81.     
  82.     // Component Interconnection
  83.     inputAxon.setPreActivityAccess(&inputFile);
  84.     inputAxonBackprop.setDual(&inputAxon);
  85.     hidden1SynapseBackprop.setDual(&hidden1Synapse);
  86.     hidden1AxonBackprop.setDual(&hidden1Axon);
  87.     outputSynapseBackprop.setDual(&outputSynapse);
  88.     outputAxonBackprop.setDual(&outputAxon);
  89.     criterion.setCostAccess(&activeCostProbe);
  90.     criterion.setDesiredAccess(&desiredFile);
  91.     criterionBackprop.setDual(&criterion);
  92.     inputAxon.setNext(&hidden1Synapse);
  93.     inputAxonBackprop.setLast(&hidden1SynapseBackprop);
  94.     hidden1Synapse.setLast(&inputAxon);
  95.     hidden1Synapse.setNext(&hidden1Axon);
  96.     hidden1SynapseBackprop.setLast(&hidden1AxonBackprop);
  97.     hidden1SynapseBackprop.setNext(&inputAxonBackprop);
  98.     hidden1Axon.setLast(&hidden1Synapse);
  99.     hidden1Axon.setNext(&outputSynapse);
  100.     hidden1AxonBackprop.setLast(&outputSynapseBackprop);
  101.     hidden1AxonBackprop.setNext(&hidden1SynapseBackprop);
  102.     outputSynapse.setLast(&hidden1Axon);
  103.     outputSynapse.setNext(&outputAxon);
  104.     outputSynapseBackprop.setLast(&outputAxonBackprop);
  105.     outputSynapseBackprop.setNext(&hidden1AxonBackprop);
  106.     outputAxon.setLast(&outputSynapse);
  107.     outputAxon.setNext(&criterion);
  108.     outputAxonBackprop.setLast(&criterionBackprop);
  109.     outputAxonBackprop.setNext(&outputSynapseBackprop);
  110.     criterion.setLast(&outputAxon);
  111.     criterionBackprop.setNext(&outputAxonBackprop);
  112.     hidden1SynapseBackpropGradient.setErrorSoma(&hidden1SynapseBackprop);
  113.     hidden1AxonBackpropGradient.setErrorSoma(&hidden1AxonBackprop);
  114.     outputSynapseBackpropGradient.setErrorSoma(&outputSynapseBackprop);
  115.     outputAxonBackpropGradient.setErrorSoma(&outputAxonBackprop);
  116.     fclose(loadStream);
  117.     
  118.     // Get Ready to Run Network
  119.     int updateCounter=0;
  120.         criterion.fireGetReady();
  121.     
  122.     // Run Network
  123.     int epochs = 100;
  124.     int exemplars = 4;
  125.     int epochsPerCV = 0;
  126.     int exemplarsPerUpdate = 4;
  127.     for (int epoch=0; epoch<epochs; epoch++) { 
  128.         for (int exemplar=0; exemplar<exemplars; exemplar++) { 
  129.             inputAxon.fire();
  130.             if (backpropLearningOn || forceBackpropLearning) {
  131.                 inputAxonBackprop.backpropStarting();
  132.                 hidden1SynapseBackprop.backpropStarting();
  133.                 hidden1AxonBackprop.backpropStarting();
  134.                 outputSynapseBackprop.backpropStarting();
  135.                 outputAxonBackprop.backpropStarting();
  136.                 criterionBackprop.backpropStarting();
  137.                 criterionBackprop.fire();
  138.                 inputAxonBackprop.backpropComplete();
  139.                 hidden1SynapseBackprop.backpropComplete();
  140.                 hidden1AxonBackprop.backpropComplete();
  141.                 outputSynapseBackprop.backpropComplete();
  142.                 outputAxonBackprop.backpropComplete();
  143.                 criterionBackprop.backpropComplete();
  144.                 if (++updateCounter >= exemplarsPerUpdate) {
  145.                     hidden1SynapseBackpropGradient.updateWeights(&hidden1Synapse);
  146.                     hidden1AxonBackpropGradient.updateWeights(&hidden1Axon);
  147.                     outputSynapseBackpropGradient.updateWeights(&outputSynapse);
  148.                     outputAxonBackpropGradient.updateWeights(&outputAxon);
  149.                     updateCounter = 0;
  150.                 }
  151.                 forceBackpropLearning = FALSE;
  152.             }
  153.             if (networkStopped) {
  154.                 criterion.reportCost();
  155.                 goto ConcludeFiring;
  156.             }
  157.         }
  158.         NSFloat cost5 = criterion.reportCost();
  159.             criterion.m_bIgnoreNextError = FALSE;
  160.         criterion.epochEnded();
  161.         if (networkStopped)
  162.             goto ConcludeFiring;
  163.     }
  164.     
  165.     ConcludeFiring:
  166.  
  167.     saveAllWeights("xorTraining.nsw");
  168.  
  169.     return 0;
  170. }
  171.  
  172. void saveAllWeights(char *weightsFilePath)
  173. {    FILE *saveStream = fopen(weightsFilePath,"w");
  174.     if (!saveStream) {
  175.         fprintf(stderr, "Could not open weight file %s\n", weightsFilePath);
  176.         exit(1);
  177.     }
  178.     writeWeightFileVersion(saveStream);
  179.     inputFile.saveWeights(putComponent(saveStream, "File", "inputFile"));
  180.     desiredFile.saveWeights(putComponent(saveStream, "File", "desiredFile"));
  181.     inputAxon.saveWeights(putComponent(saveStream, "Axon", "inputAxon"));
  182.     hidden1Synapse.saveWeights(putComponent(saveStream, "FullSynapse", "hidden1Synapse"));
  183.     hidden1SynapseBackprop.saveWeights(putComponent(saveStream, "BackFullSynapse", "hidden1SynapseBackprop"));
  184.     hidden1Axon.saveWeights(putComponent(saveStream, "TanhAxon", "hidden1Axon"));
  185.     outputSynapse.saveWeights(putComponent(saveStream, "FullSynapse", "outputSynapse"));
  186.     outputSynapseBackprop.saveWeights(putComponent(saveStream, "BackFullSynapse", "outputSynapseBackprop"));
  187.     outputAxon.saveWeights(putComponent(saveStream, "TanhAxon", "outputAxon"));
  188.     criterion.saveWeights(putComponent(saveStream, "L2Criterion", "criterion"));
  189.     hidden1SynapseBackpropGradient.saveWeights(putComponent(saveStream, "Momentum", "hidden1SynapseBackpropGradient"));
  190.     hidden1AxonBackpropGradient.saveWeights(putComponent(saveStream, "Momentum", "hidden1AxonBackpropGradient"));
  191.     outputSynapseBackpropGradient.saveWeights(putComponent(saveStream, "Momentum", "outputSynapseBackpropGradient"));
  192.     outputAxonBackpropGradient.saveWeights(putComponent(saveStream, "Momentum", "outputAxonBackpropGradient"));
  193.     fclose(saveStream);
  194. }
  195.  
  196.