Finally, you are ready to run your project.
Now you can run through a Test -- just hit Run in the Epoch_1 control panel. You will see the four patterns flicker through the NetView, and you will see them logged in the GridLogView. The outputs all look pretty much the same, at this point. But now you can start to train the network. Click on Step or Run in the Train control panel, and you are off and running.
You can play around with parameters, etc. as described in the previous tutorial on running XOR.
There is one very important aspect of PDP++ which has not yet been demonstrated in the tutorial, which we can step through at this point. This is the ability to apply different parameters to different parts of the network. For the purposes of demonstration, we will assume that we want to have one learning rate for the input-to-hidden weights, and another learning rate for the hidden-to-output weights. The basic idea about how to do this is to create two different ConSpec objects, one of which applies to the input-to-hidden weights, and another of which applies to the hidden-to-output weights. An important facility in PDP++ is the ability to create a child spec that automatically inherits a set of parameters from a parent spec, and has a set of unique parameters. Thus, for the present example, we would want to create a child ConSpec that inherits everything from the parent except for the learning rate, which will be unique to it. Thus, we will have two conspecs that are identical except for the learning rate. The advantage of this setup is that if you should decide to manipulate other parameters such as momentum, weight decay, etc, the two specs will automatically get the same values of these changed parameters.
To create the new child ConSpec, locate the Project window, and do .specs / New Child / BpConSpec_0 (note that New Child is at the bottom of the menu). This will bring up a New object dialog, specifying that the new BpConSpec will be created as a child of the existing one. Select Ok with the right mouse button, so that the new child will be edited. Then, click the mouse into the lrate field, and enter a new learning rate parameter (e.g., .01). Notice that the little check-box next to this field was checked when we clicked in lrate. This indicates that this is a unique parameter, while the other, non-checked boxes are inherited parameters. To see how this works, let's edit the parent spec. At the top of the edit dialog, select Actions / Find Parent, which will bring up the edit dialog for the parent con spec. Notice that the parent does not have any of the unique check boxes, since it does not inherit from anything else. Now, change another parameter, like momentum, in the parent dialog, and press Apply. The Revert button on the child spec is highlighted, so press it. Notice that the child dialog displays the new (changed) momentum value, but retains the unique learning rate parameter entered before. Elaborate hierarchies of specs can be created, and the patterns of inheritence and unique parameters provides a very clear indication what is specialized about specific spec relative to the others, and what it has in common.
Before closing the edit dialogs, it is a good idea to label them with mnemonic names -- call the parent "input-to-hidden cons" and the child "hidden-to-output cons", for example. Then click Ok on both edit dialogs.
Having created the specs with different learning rates, we now need to specify that one spec applies to one set of connections, and another applies to the other set. As it is now, the parent spec applies to all projections, since it is the default that was created automatically when the connections were created. The best way to set specs is using the NetView, which has a Selections menu that operates on selected items in the NetView (it is on the view half (right side) of the window, since it operates on the items selected in a particular view). Thus, make sure you are in Select mode, and select the projection arrow that goes from the hidden to the output layer. Then, select Selections / Set Con Spec. This will bring up a popup dialog, where you should select BpConSpec / hidden-to-output cons, and click Ok. This has now set the selected projection to use this con spec instead of the default. To verify the status of the network, click in the backround of the NetView to unselect everything, and then choose Selections / Show Con Spec. In the dialog, select hidden-to-output cons, and click Ok. The correct projection arrow will be selected in the NetView, indicating that it is using that con spec. You can repeat this to verify that the other projection is still using "input-to-hidden cons". Thus, the Selections menu allows you to both set and verify which objects in the network are using which specs. Notice that you can set many other properties using this menu much in the same way we just did for ConSpecs on projections.
At this point, you might want to look at some of the other demo projects available. These are located in the `demo' directory where the XOR example project was. Check out the `README' files for further information.