Blame simple/neural/nn-trainer.cpp

Ivan Mahonin 56d550
Ivan Mahonin 56d550
#include <ctime>
Ivan Mahonin 56d550
#include <cstdlib>
Ivan Mahonin 56d550
Ivan Mahonin 025224
#include "nnlayer.inc.cpp"
Ivan Mahonin 025224
#include "nnlayer.conv.inc.cpp"
Ivan Mahonin 025224
#include "nnlayer.lnk.inc.cpp"
Ivan Mahonin 56d550
#include "nntrain.inc.cpp"
Ivan Mahonin 56d550
Ivan Mahonin 56d550
Ivan Mahonin 56d550
int main() {
Ivan Mahonin 56d550
  srand(time(NULL));
Ivan Mahonin 56d550
Ivan Mahonin 025224
  const char *filename = "data/output/weights.bin"; // 28x28
Ivan Mahonin 025224
  //const char *filename = "data/output/weights22.bin";
Ivan Mahonin 025224
Ivan Mahonin 56d550
  printf("load training data\n");
Ivan Mahonin 025224
  Trainer t(0.25);
Ivan Mahonin 56d550
  if (!t.loadSymbolMap("data/symbols-data.bin", 784, 10)) return 1;
Ivan Mahonin 025224
  //if (!t.loadSymbolMap("data/symbols22-data.bin", 22*22, 10)) return 1;
Ivan Mahonin 56d550
Ivan Mahonin 56d550
  printf("create neural network\n");
Ivan Mahonin 025224
  //Layer l(nullptr, 784);
Ivan Mahonin 025224
  //new LayerSimple(l, 128);
Ivan Mahonin 025224
  //new LayerSimple(l, 64);
Ivan Mahonin 025224
  //new LayerSimple(l, 10);
Ivan Mahonin 025224
Ivan Mahonin 025224
  //Layer l(nullptr, 784);
Ivan Mahonin 025224
  //new LayerConvolution<false, 6,2>(l, 12, 12, 4);
Ivan Mahonin 025224
  //new LayerConvolution<false, 6,2>(l, 4, 4, 16);
Ivan Mahonin 025224
  ////new LayerConvolution<false, 4>(l, 1, 1, 128);
Ivan Mahonin 025224
  ////new LayerSimple(l, 64);
Ivan Mahonin 025224
  //new LayerSimple(l, 10);
Ivan Mahonin 025224
Ivan Mahonin 025224
  //Layer l(nullptr, 784);
Ivan Mahonin 025224
  //new LayerConvolution<false, 7>(l, 22, 22, 1);
Ivan Mahonin 025224
  //new LayerConvolution<false, 9>(l, 14, 14, 1);
Ivan Mahonin 025224
  //new LayerConvolution<false,11>(l, 4, 4, 1);
Ivan Mahonin 025224
  //new LayerSimple(l, 10);
Ivan Mahonin 025224
Ivan Mahonin 025224
  Layer l(nullptr, 784);
Ivan Mahonin 53488e
  new LayerLinkConvolution(l, 28, 28, 1, 22, 22, 1,  60);
Ivan Mahonin 53488e
  new LayerLinkConvolution(l, 22, 22, 1, 14, 14, 1, 100);
Ivan Mahonin 53488e
  new LayerLinkConvolution(l, 14, 14, 1,  4,  4, 1, 140);
Ivan Mahonin 025224
  new LayerSimple(l, 10);
Ivan Mahonin 025224
Ivan Mahonin 53488e
  printf("  neurons: %d, links %d, memSize: %llu\n", l.totalSize(), l.totalLinks(), (unsigned long long)l.totalMemSize());
Ivan Mahonin 56d550
Ivan Mahonin 025224
  //printf("try load previously saved network\n");
Ivan Mahonin 025224
  //l.load(filename);
Ivan Mahonin 56d550
Ivan Mahonin 56d550
  printf("train\n");
Ivan Mahonin 025224
  t.trainSimple(l, 1000, 0.5, 10000);
Ivan Mahonin 025224
  //for(double q = 0.5; q > 0.05; q *= 0.5)
Ivan Mahonin 025224
  //  t.trainBlock(l, 50, 20, q, 10000);
Ivan Mahonin 025224
  //t.trainBlock(l, 50, 20, 0.5, 10000);
Ivan Mahonin 025224
  //t.trainBlock(l, 10, 100, 0.5, 1);
Ivan Mahonin 56d550
Ivan Mahonin 56d550
  printf("save neural network weights\n");
Ivan Mahonin 025224
  if (!l.save(filename)) return 1;
Ivan Mahonin 56d550
Ivan Mahonin 56d550
  return 0;
Ivan Mahonin 56d550
}
Ivan Mahonin 56d550