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 }