Category : Miscellaneous Language Source Code
Archive   : NETS_1.ZIP
Filename : SHOW.C

 
Output of file : SHOW.C contained in archive : NETS_1.ZIP
/*=============================*/
/* NETS */
/* */
/* a product of the AI Section */
/* NASA, Johnson Space Center */
/* */
/* principal author: */
/* Paul Baffes */
/* */
/* contributing authors: */
/* Bryan Dulock */
/* Chris Ortiz */
/*=============================*/


/*
----------------------------------------------------------------------
Code For Showing Network Structures (Prefix = S_)
----------------------------------------------------------------------
This code is divided into 3 major sections:

(1) include files
(2) externed functions
(3) subroutines

Each section is further explained below.
----------------------------------------------------------------------
*/


/*
----------------------------------------------------------------------
INCLUDE FILES
----------------------------------------------------------------------
*/
#include "common.h"
#include "weights.h"
#include "layer.h"
#include "net.h"


/*
----------------------------------------------------------------------
EXTERNED FUNCTIONS
----------------------------------------------------------------------
Below are the functions defined in other files which are used by the
code here. They are organized by section.
----------------------------------------------------------------------
*/
extern Layer *N_get_layer();
extern void L_show_biases();
extern void L_show_learn_rates();
extern Weights *L_get_weights();
extern void W_show_weights();
extern void IO_print();
extern void IO_reset_more();
extern int IO_more();

extern char IO_str[MAX_LINE_SIZE];


/*
======================================================================
ROUTINES IN SHOWNET.C
======================================================================
The routines in this file are grouped below by function. Each routine
is prefixed by the string "S_" indicating that it is defined in the
"show.c" file. The types returned by the routines are also shown
here so that cross checking is more easily done between these functions
and the other files which intern them.


Type Returned Routine
------------- -------
void S_show_net
void S_show_wts
void S_show_weights
void S_show_biases
======================================================================
*/


void S_show_net(ptr_net)
Net *ptr_net;
/*
----------------------------------------------------------------------
This routine prints out the configuration of the net passed in. The
process involves printing out the net ID, then all the layers. The
layers are printed out in rows, starting with the input layer, then
the output layer, then any hidden layers. Each row has the layer id,
then the size of the layer (in nodes), then a list of all of its
outputs, then a list of all of its inputs.
----------------------------------------------------------------------
*/
BEGIN
void S_show_wts();
Layer_lst *current;

sprintf(IO_str, "\n\nnet ID: %d", ptr_net->ID);
IO_print(0);
sprintf(IO_str, "\nbiases in use: %s\n",
(ptr_net->use_biases == TRUE) ? "TRUE" : "FALSE");
IO_print(0);

/*----------------------------------------*/
/* show the learning rates for the layers */
/*----------------------------------------*/
current = ptr_net->hidden_front;
while (current != NULL) BEGIN
L_show_learn_rates(current->value);
current = current->next;
ENDWHILE

sprintf(IO_str, "\nlayer %d size: %d; ", ptr_net->input_layer->ID,
ptr_net->input_layer->num_nodes);
IO_print(0);
S_show_wts(ptr_net->input_layer);
sprintf(IO_str, "layer %d size: %d; ", ptr_net->output_layer->ID,
ptr_net->output_layer->num_nodes);
IO_print(0);
S_show_wts(ptr_net->output_layer);

current = ptr_net->hidden_front;
while (current->value->ID != OUT_LAYER) BEGIN
sprintf(IO_str, "layer %d size: %d; ", current->value->ID,
current->value->num_nodes);
IO_print(0);
S_show_wts(current->value);
current = current->next;
ENDWHILE

END /* S_show_net */


void S_show_wts(ptr_layer)
Layer *ptr_layer;
/*
----------------------------------------------------------------------
NOTE THAT THIS ROUTINE DOES NOT PRINT OUT WEIGHT VALUES. All that is
done here is to print out a list of the layer ID to which the input
layer acts as a source. Then the same thing is done showing from
which the current layer acts as a target.
----------------------------------------------------------------------
*/
BEGIN
Weights_lst *current;

sprintf(IO_str, "as source to: ");
IO_print(0);
current = ptr_layer->out_weights;
while (current != NULL) BEGIN
sprintf(IO_str, "%d ", current->value->target_layer->ID);
IO_print(0);
current = current->next;
ENDWHILE

sprintf(IO_str, " as target from: ");
IO_print(0);
current = ptr_layer->in_weights;
while (current != NULL) BEGIN
sprintf(IO_str, "%d ", current->value->source_layer->ID);
IO_print(0);
current = current->next;
ENDWHILE
sprintf(IO_str, "\n");
IO_print(0);

END /* S_show_wts */


void S_show_weights(ptr_net, source, target)
Net *ptr_net;
int source, target;
/*
----------------------------------------------------------------------
Given a particular nerual net, a source layer, and a target layer,
this routine will print out the weights between those layers, if a

set of weights exitst. If no weights exist between the two layers
this guy will print out an error message.
----------------------------------------------------------------------
*/
BEGIN
Layer *ptr_layer;
Weights *ptr_weights;

IO_reset_more();

ptr_layer = N_get_layer(ptr_net, source);
if (ptr_layer->ID == ERROR) BEGIN
sprintf(IO_str, "\n*** no source layer found ***\n");
IO_print(0);
return;
ENDIF

ptr_weights = L_get_weights(ptr_layer, target);
if (ptr_weights->type == ERROR) BEGIN
sprintf(IO_str, "\n*** no such source,target pair ***\n");
IO_print(0);
return;
ENDIF

sprintf(IO_str, "\n\nWeights FROM layer %d TO layer %d\n",
ptr_weights->source_layer->ID, ptr_weights->target_layer->ID);
IO_more(0);
W_show_weights(ptr_weights);

END /* S_show_weights */


void S_show_biases(ptr_net, layer_num)
Net *ptr_net;
int layer_num;
/*
----------------------------------------------------------------------
Given a particular nerual net, a source layer, and a target layer,
this routine will print out the weights between those layers, if a
set of weights exitst. If no weights exist between the two layers
this guy will print out an error message.
----------------------------------------------------------------------
*/
BEGIN
Layer *ptr_layer;

IO_reset_more();

if (layer_num == 0) BEGIN
sprintf(IO_str, "\n*** input layer has no bias values ***");
IO_print(0);
return;
ENDIF

ptr_layer = N_get_layer(ptr_net, layer_num);
if (ptr_layer->ID == ERROR) BEGIN
sprintf(IO_str, "\n*** layer %d not found ***\n", layer_num);
IO_print(0);
return;
ENDIF

sprintf(IO_str, "\n\nBias values for layer %d\n", ptr_layer->ID);
IO_more(0);
L_show_biases(ptr_layer);

END /* S_show_biases */



  3 Responses to “Category : Miscellaneous Language Source Code
Archive   : NETS_1.ZIP
Filename : SHOW.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/