1  /* libtest_create
 2   *     - This example shows how a network can be created, initialized,
 3   *       copied and so on.
 4   *     - This example shows also how a Teacher object interacts with the
 5   *       Network objects.
 6   * howto use
 7   *     $> ./libtest_create
 8   *     $> perl process_dumps.pl <format>
 9   *     $> <viewer> dump/libtest_create*
10   * for example
11   *     $> ./libtest_create && perl process_dumps.pl png
12   *     $> kuickshow dump/libtest_create*
13   * __________________________________________________________________________*/
14
15  #include "snnl_network.h"
16  #include "snnl_teacher.h"
17
18  #include <iostream>
19
20  int
21  main (int argc, char *argv[])
22  {
23      Network *net1, *net2, *net3;
24      Teacher *teacher;
25
26      /* a vector is used to describe the network architecture */
27      vector <unsigned int> net_descr;
28      net_descr.push_back (2);    // first layer  - Input  - with 2 neurons
29      net_descr.push_back (8);    // second layer - Hidden - with 8 neurons
30      net_descr.push_back (4);    // third layer  - Hidden - with 4 neurons
31      net_descr.push_back (1);    // last layer   - Output - with 1 neuron
32
33      /* create this network */
34      net1 = new Network (net_descr, "example snnl network 1");
35
36      /* save this network
37       * NOTE: IO-functions return boolean success values */
38      if (! net1->save ("dump/libtest_create_net.net")) {
39          cerr << "Can't save net1\n";
40          exit (EXIT_FAILURE);
41      }
42
43      /* create a second empty network and load net1 from file */
44      net2 = new Network ();
45      if (! net2->load ("dump/libtest_create_net.net")) {
46          cerr << "Can't load net2\n";
47          exit (EXIT_FAILURE);
48      }
49      net2->name = "example snnl network 2";
50
51      /* set the activation function of all hidden layer neurons */
52      net1->setActivationFunction (Hidden, &ActivationFunctions::fact_log);
53      net2->setActivationFunction (Hidden, &ActivationFunctions::fact_log);
54
55
56      /* create a teacher for network 1 */
57      teacher = new Teacher (net1);
58
59      /* set the learn parameters */
60      teacher->setLearningParameter (0.2);
61      teacher->setMomentumTermParameter (0.5);
62      teacher->setWeightDecayParameter (0.00004);
63      teacher->setOptimalTolerance (0.05);
64
65      /* randomize weights and theta values of network 1 */
66      teacher->randomizeParameters ();
67
68      /* use the teacher also with network 2 */
69      teacher->setNetwork (net2);
70      teacher->randomizeParameters ();
71
72      /* now clone network 2 to network 3 */
73      net3 = new Network (net2);
74
75      /* dump all networks for visualization through graphviz/dot */
76      net1->dumpGraph ("dump/libtest_create_net1.dot");
77      net2->dumpGraph ("dump/libtest_create_net2.dot");
78      net3->dumpGraph ("dump/libtest_create_net3.dot");
79
80      /* clean up after usage */
81      delete teacher;
82      delete net1;
83      delete net2;
84      delete net3;
85
86      exit (EXIT_SUCCESS);
87  }