IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 23, 2018, 10:11:50 AM (9 years ago)
Author:
eugene
Message:

working on nnet

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/lib.data/nnet.c

    r40317 r40319  
    11# include "data.h"
    2 
    3 typedef struct {
    4   char *name;
    5   int Nlayers; // Nlayers = input layer + output layer + hidden layers
    6   int *Nnodes; // number of nodes per layer
    7   float **weights; // a matrix between each layer
    8   float **biases; // a vector for each layer
    9 
    10   float **zvalue; // a vector of z values for each layer (= w*input + b)
    11   float **svalue; // a vector of s values for each layer (= sigmoid(z))
    12   float **sprime; //
    13   float **delta;  //
    14 
    15   float ** Nabla_b; // a vector of Nabla_b values for each layer
    16   float **dNabla_b; // a vector of Nabla_b values for each layer
    17 
    18   float ** Nabla_w; // a matrix of Nabla_w values for each layer
    19   float **dNabla_w; // a matrix of Nabla_w values for each layer
    20 } NNet;
    212
    223static Nnet **nnets  = NULL; /* nnet to store the list of all nnets */
     
    3415  int i;
    3516
    36   for (i = 0; i < Nnnets; i++) {
    37     FreeNnet (nnets[i]);
     17  if (!nnets) InitNnets();
     18
     19  for (i = 0; i < Nnnets; i++) {
     20    FreeNnetData (nnets[i]);
     21    free (nnets[i]);
    3822  }
    3923  free (nnets);
     
    4630  nnet[0].name = strcreate (name);
    4731
    48   nnet[0].Nlayers = 0;
     32  nnet[0].Nlayer  = 0;
    4933  nnet[0].Nnodes  = NULL;
    50   nnet[0].weights = NULL;
     34  nnet[0].weight  = NULL;
    5135  nnet[0].biases  = NULL;
    52   nnet[0].avalue  = NULL;
     36  nnet[0].svalue  = NULL;
    5337  nnet[0].zvalue  = NULL;
     38  nnet[0].sprime  = NULL;
     39  nnet[0].delta   = NULL;
    5440
    5541  nnet[0]. Nabla_b  = NULL;
     
    6450
    6551    free (nnet[0].name);
    66     for (i = 0; i < nnet[0].Nlayers; i++) {
    67       free (nnet[0].weights[i]);
     52    for (i = 0; i < nnet[0].Nlayer; i++) {
     53      free (nnet[0].weight[i]);
    6854      free (nnet[0].biases[i]);
    6955      free (nnet[0].svalue[i]);
     
    7864    }
    7965    free (nnet[0].Nnodes);
    80     free (nnet[0].weights);
     66    free (nnet[0].weight);
    8167    free (nnet[0].biases);
    8268    free (nnet[0].svalue);
     
    9480Nnet *GetNnet (int where) {
    9581
     82  if (!nnets) InitNnets();
     83
    9684  if (where < 0) where += Nnnets;
    9785  if (where < 0) return NULL;
     
    10593  int i;
    10694
     95  if (!nnets) InitNnets();
     96
    10797  for (i = 0; i < Nnnets; i++) {
    10898    if (!strcmp (nnets[i][0].name, name)) {
     
    113103}
    114104
    115 /* make a new named nnet with Nlayers */
     105/* make a new named nnet with Nlayer */
    116106Nnet *CreateNnet (char *name, int Nlayer) {
    117107
    118108  int N;
    119109  Nnet *nnet;
     110
     111  if (!nnets) InitNnets();
    120112
    121113  nnet = FindNnet (name);
    122114  if (nnet != NULL) {
    123115    FreeNnetData (nnet);
    124     InitNnetData (nnet);
     116    InitNnetData (nnet, name);
    125117    return (nnet);
    126118  }
     
    134126  nnet[0].Nlayer = Nlayer;
    135127  ALLOCATE (nnet[0].Nnodes, int, Nlayer);
    136   ALLOCATE (nnet[0].weights, float *, Nlayer);
     128  ALLOCATE (nnet[0].weight, float *, Nlayer);
    137129  ALLOCATE (nnet[0].biases, float *, Nlayer);
    138130  ALLOCATE (nnet[0].svalue, float *, Nlayer);
     
    155147  ohana_gaussdev_init ();
    156148
    157   for (int i = 1; i < Nlayer; i++) {
     149  // NOTE : none of these elements are used for the first layer (the input layer)
     150  // EXCEPT svalue[0]
     151 
     152  nnet[0].weight[0] = NULL;
     153  nnet[0].biases[0] = NULL;
     154  nnet[0].zvalue[0] = NULL;
     155  nnet[0].sprime[0] = NULL;
     156  nnet[0].delta [0] = NULL;
     157  nnet[0]. Nabla_b[0] = NULL;
     158  nnet[0].dNabla_b[0] = NULL;
     159  nnet[0]. Nabla_w[0] = NULL;
     160  nnet[0].dNabla_w[0] = NULL;
     161
     162  ALLOCATE (nnet[0].svalue[0], float, nnet[0].Nnodes[0]);
     163
     164  for (int i = 1; i < nnet[0].Nlayer; i++) {
    158165    ALLOCATE (nnet[0].biases[i], float, nnet[0].Nnodes[i]);  // biases for each node in the hidden and output layers only
    159166    for (int j = 0; j < nnet[0].Nnodes[i]; j++) {
     
    161168    }
    162169
    163     ALLOCATE (nnet[0].weights[i], float, nnet[0].Nnodes[i-1]*nnet[0].Nnodes[i]);  // weights connected each node in the previous layer to the current layer (excludes input layer)
     170    ALLOCATE (nnet[0].weight[i], float, nnet[0].Nnodes[i-1]*nnet[0].Nnodes[i]);  // weight connected each node in the previous layer to the current layer (excludes input layer)
    164171    for (int j = 0; j < nnet[0].Nnodes[i-1]*nnet[0].Nnodes[i]; j++) {
    165       nnet[0].weights[i][j] = ohana_gaussdev_rnd (0.0, 1.0);
     172      nnet[0].weight[i][j] = ohana_gaussdev_rnd (0.0, 1.0);
    166173    }
    167174
     
    171178    ALLOCATE (nnet[0].delta [i], float, nnet[0].Nnodes[i]);  // vectors for holding results / values for each node in the input, hidden, output layers
    172179
    173     ALLOCATE (nnet[0]. Nabla_b, float, nnet[0].Nnodes[i]);
    174     ALLOCATE (nnet[0].dNabla_b, float, nnet[0].Nnodes[i]);
    175 
    176     ALLOCATE (nnet[0]. Nabla_w, float, nnet[0].Nnodes[i-1]*nnet[0].Nnodes[i]);
    177     ALLOCATE (nnet[0].dNabla_w, float, nnet[0].Nnodes[i-1]*nnet[0].Nnodes[i]);
     180    ALLOCATE (nnet[0]. Nabla_b[i], float, nnet[0].Nnodes[i]);
     181    ALLOCATE (nnet[0].dNabla_b[i], float, nnet[0].Nnodes[i]);
     182    ALLOCATE (nnet[0]. Nabla_w[i], float, nnet[0].Nnodes[i-1]*nnet[0].Nnodes[i]);
     183    ALLOCATE (nnet[0].dNabla_w[i], float, nnet[0].Nnodes[i-1]*nnet[0].Nnodes[i]);
    178184  }
    179185}
     
    183189
    184190  int i, N, NNNETS_2;
     191
     192  if (!nnets) InitNnets();
    185193
    186194  /* find nnet in nnet list */
     
    204212  }
    205213
    206   FreeNnet (nnet);
     214  FreeNnetData (nnet);
     215  free (nnet);
    207216  return (TRUE);
    208217}
     
    213222  int i, j;
    214223
     224  if (!nnets) InitNnets();
     225
    215226  for (i = 0; i < Nnnets; i++) {
    216227    gprint (GP_ERR, "%-15s :", nnets[i][0].name);
    217     for (j = 0; j < nnets[i][0].Nlayers; i++) {
     228    for (j = 0; j < nnets[i][0].Nlayer; j++) {
    218229      gprint (GP_ERR, " %3d", nnets[i][0].Nnodes[j]);
    219230    }
Note: See TracChangeset for help on using the changeset viewer.