Index: trunk/Ohana/src/opihi/lib.data/nnet.c
===================================================================
--- trunk/Ohana/src/opihi/lib.data/nnet.c	(revision 40325)
+++ trunk/Ohana/src/opihi/lib.data/nnet.c	(revision 40371)
@@ -45,16 +45,16 @@
 
   nnet[0].Nlayer = Nlayer;
-  ALLOCATE (nnet[0].Nnodes, int, Nlayer);
-  ALLOCATE (nnet[0].weight, float *, Nlayer);
-  ALLOCATE (nnet[0].biases, float *, Nlayer);
-  ALLOCATE (nnet[0].svalue, float *, Nlayer);
-  ALLOCATE (nnet[0].zvalue, float *, Nlayer);
-  ALLOCATE (nnet[0].sprime, float *, Nlayer);
-  ALLOCATE (nnet[0].delta , float *, Nlayer);
-
-  ALLOCATE (nnet[0]. Nabla_b, float *, Nlayer);
-  ALLOCATE (nnet[0].dNabla_b, float *, Nlayer);
-  ALLOCATE (nnet[0]. Nabla_w, float *, Nlayer);
-  ALLOCATE (nnet[0].dNabla_w, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0].Nnodes, int, Nlayer);
+  ALLOCATE_ZERO (nnet[0].weight, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0].biases, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0].svalue, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0].zvalue, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0].sprime, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0].delta , float *, Nlayer);
+
+  ALLOCATE_ZERO (nnet[0]. Nabla_b, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0].dNabla_b, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0]. Nabla_w, float *, Nlayer);
+  ALLOCATE_ZERO (nnet[0].dNabla_w, float *, Nlayer);
 }
 
@@ -63,30 +63,30 @@
     int i;
 
-    free (nnet[0].name);
+    FREE (nnet[0].name);
     for (i = 0; i < nnet[0].Nlayer; i++) {
-      free (nnet[0].weight[i]);
-      free (nnet[0].biases[i]);
-      free (nnet[0].svalue[i]);
-      free (nnet[0].zvalue[i]);
-      free (nnet[0].sprime[i]);
-      free (nnet[0].delta [i]);
-
-      free (nnet[0]. Nabla_b[i]);
-      free (nnet[0].dNabla_b[i]);
-      free (nnet[0]. Nabla_w[i]);
-      free (nnet[0].dNabla_w[i]);
-    }
-    free (nnet[0].Nnodes);
-    free (nnet[0].weight);
-    free (nnet[0].biases);
-    free (nnet[0].svalue);
-    free (nnet[0].zvalue);
-    free (nnet[0].sprime);
-    free (nnet[0].delta );
-
-    free (nnet[0]. Nabla_b);
-    free (nnet[0].dNabla_b);
-    free (nnet[0]. Nabla_w);
-    free (nnet[0].dNabla_w);
+      FREE (nnet[0].weight[i]);
+      FREE (nnet[0].biases[i]);
+      FREE (nnet[0].svalue[i]);
+      FREE (nnet[0].zvalue[i]);
+      FREE (nnet[0].sprime[i]);
+      FREE (nnet[0].delta [i]);
+
+      FREE (nnet[0]. Nabla_b[i]);
+      FREE (nnet[0].dNabla_b[i]);
+      FREE (nnet[0]. Nabla_w[i]);
+      FREE (nnet[0].dNabla_w[i]);
+    }
+    FREE (nnet[0].Nnodes);
+    FREE (nnet[0].weight);
+    FREE (nnet[0].biases);
+    FREE (nnet[0].svalue);
+    FREE (nnet[0].zvalue);
+    FREE (nnet[0].sprime);
+    FREE (nnet[0].delta );
+
+    FREE (nnet[0]. Nabla_b);
+    FREE (nnet[0].dNabla_b);
+    FREE (nnet[0]. Nabla_w);
+    FREE (nnet[0].dNabla_w);
 }
 
@@ -236,2 +236,18 @@
 }
 
+void PrintNnet (Nnet *nnet) {
+
+  for (int L = 1; L < nnet[0].Nlayer; L++) {
+    gprint (GP_ERR, " ----- Layer %d -----\n", L);
+    for (int j = 0; j < nnet[0].Nnodes[L]; j++) {
+      for (int i = 0; i < nnet[0].Nnodes[L-1]; i++) {
+	int k = j * nnet[0].Nnodes[L-1] + i;
+	myAssert (k < nnet[0].Nnodes[L-1]*nnet[0].Nnodes[L], "overflow");
+	gprint (GP_ERR, "%7.4f ", nnet[0].weight[L][k]);
+      }
+      gprint (GP_ERR, " : %7.4f\n", nnet[0].biases[L][j]);
+    }
+  }
+  return;
+}
+
