caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Eray Ozkural <erayo@cs.bilkent.edu.tr>
To: Oleg <oleg_inconnu@myrealbox.com>
Cc: caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] productivity improvement
Date: Tue, 15 Oct 2002 18:08:17 +0300	[thread overview]
Message-ID: <200210151808.17342.erayo@cs.bilkent.edu.tr> (raw)
In-Reply-To: <200210151233.IAA08545@apakabar.cc.columbia.edu>

On Tuesday 15 October 2002 15:34, Oleg wrote:
> On Tuesday 15 October 2002 05:31 am, Eray Ozkural wrote:
> > I have a feeling I can beat any ANN implementation written in C++ for
> > that matter ;) I was writing a generic ANN library in C++ and found it to
> > be quite difficult to put together different kinds of networks and
> > algorithms in the same basket. It would really benefit from a well
> > designed generic graph library which I can imagine would be possible only
> > in a functional language.
>
> "Beat" in what sense? Should you decide to write an O'Caml ANN library that
> learns better or faster than PDP++, SNNS and Torch, I can't imagine anyone
> trying to keep you from doing it.
>

I think better in the sense of extensibility, it could be made to allow more 
sophisticated learning algorithms or ANN models. It could be made just as 
efficient as any C code, or even faster who knows. Actually, what I have in 
mind is a general purpose machine learning library which has all the standard 
networks under the "ANN" module: single layer, multi layer feed forward 
(together with BP), hopfield and kohonen nets... I wrote all that in C++ for 
a grad course but I think it has its shortcomings, so I intend to rewrite it 
in ocaml so that I can have a convenient machine learning shell.

Nevertheless, it's an awful lot of work if you want to have your interfaces 
tidy.

> BTW BOOST has some sort of template graph library by Jeremy Siek.

Yes I know, but I prefer to use my own stuff. Even though that library is 
supposed to go into C++ standard some time in the future ;) I think C++ will 
be obsolete by then ;)


Here is some C++ client code for character recognition to give you a feel of 
the approach I have in mind. I would like to have an ANN library that is more 
generic than the one I crafted in C++ ;) Any ideas welcome.

  typedef Neuron< Bipolar_Sigmoidal_Custom > Neuron;
  typedef Sqr_Matrix<double,5> Matrix;
  typedef Matrix_Source< Matrix > Source;
  typedef pair<Source *, vector<double> > Training_Pair;

  // use a multi layered neural network
  Feed_Forward_Net<Neuron, Raw_Input_Neuron, Neuron> ff_net;

  // add hidden neurons initialized at small random values.
  for (int i=0; i<11; i++)
    ff_net.add_hidden(Neuron(Rand::rand_double(-0.005, 0.005), 0));
  // initialize with random values
  ff_net.init_random();

  // a square 5x5 matrix
  Matrix Amtx;

  // we now configure our network for ebp

  Source source(Amtx);
  ff_net.connect_input(source);
  ff_net.connect_output(10); // our coding requires ten outputs

  // the net has been put to required topology

  // read the training sets into this training pairs list
  vector< Training_Pair > pairs;

  // this is all hardwired, not much config
  // is required.

  list< Matrix* > matrices;
//   list< auto_ptr<Matrix> > matrices;
  list< Source > sources;
  for (int character = 0; character < 10; character++) {
    ostrstream name_stream;
    name_stream << "data/char-" << character  << ".txt" << ends;
    ifstream file_in( name_stream.str()  );
    // 4 patterns each
    for (int i = 0; i<4; i++) {
      Matrix *Amtx = new Matrix;
      matrices.push_back( Amtx );
      sources.push_back( Source(*Amtx) );
      vector<double> desired = cons_max(10, character);
      pairs.push_back( Training_Pair(&sources.back(), desired) );
      file_in >> *Amtx;
    }
  }

  // train the network with this data
  // the learning coefficient is 0.02
  CPU_Time start_time;
  ff_net.train(pairs, 0.02, 0.00002, 100000);
  cout << "Trained in " << CPU_Time() - start_time << endl;

  // voila
  nlog << ff_net << endl;

  // now testing with the original training set
  list< Source >::iterator source_it = sources.begin();
  int correct_results = 0;
  for (int character = 0; character < 10; character++) {
    cout << "testing character " << character << endl;
    for (int i = 0; i<4; i++) {
      ff_net.compute(*source_it++);
      vector<double> result_vec(10);
      for (int res=0; res<10; res++)
        result_vec[res] = ff_net.output_layer[res].read();
      double result =select_max(result_vec);
      cout << "  pattern " << i
           << " : " << result << endl;
      if (result == character)
        correct_results++;
    }
  }
  double train_success = double(correct_results) / 40 * 100;
  cout << "Training success is " << train_success << "%" << endl;

and so forth...

-- 
Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>
Comp. Sci. Dept., Bilkent University, Ankara
www: http://www.cs.bilkent.edu.tr/~erayo  Malfunction: http://mp3.com/ariza
GPG public key fingerprint: 360C 852F 88B0 A745 F31B  EA0F 7C07 AE16 874D 539C
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2002-10-15 17:11 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20020716172916.4903.qmail@web10702.mail.yahoo.com>
2002-07-18 23:14 ` Oleg
2002-07-18 23:27   ` Brian Smith
2002-07-18 23:54   ` William Lovas
2002-07-19  3:59     ` Oleg
     [not found]       ` <20020719010318.B3631@boson.den.co.bbnow.net>
2002-07-19  8:22         ` Oleg
2002-07-19  8:57           ` Andreas Rossberg
2002-07-19 10:14             ` Alessandro Baretta
2002-07-19 18:15               ` John Max Skaller
2002-07-19 18:33                 ` Brian Smith
2002-07-20 17:30                   ` John Max Skaller
2002-07-19 19:06                 ` Alessandro Baretta
2002-07-20 17:49                   ` John Max Skaller
2002-07-19 10:34             ` Oleg
2002-07-19 17:25               ` Andreas Rossberg
2002-07-20 16:58                 ` John Max Skaller
2002-07-19 16:35     ` Brian Rogoff
2002-10-16 23:24       ` Eray Ozkural
2002-07-19  1:25   ` Alessandro Baretta
2002-07-19  4:04     ` Oleg
2002-07-19 15:46       ` [Caml-list] Rule based language [was: productivity improvement] Alessandro Baretta
2002-07-19 17:20         ` [Caml-list] compact.c Julie Farago
2002-10-15  9:31     ` [Caml-list] productivity improvement Eray Ozkural
2002-10-15 12:34       ` Oleg
2002-10-15 15:08         ` Eray Ozkural [this message]
2002-07-19  4:42   ` Emmanuel Renieris
2002-07-19  9:57     ` Oleg
2002-07-19 10:43       ` Alessandro Baretta
2002-07-19 10:52         ` Daniel de Rauglaudre
2002-07-19 11:36           ` Alessandro Baretta
2002-07-19 11:10       ` Xavier Leroy
2002-10-15  9:24         ` Eray Ozkural
2002-10-15 18:47           ` Pal-Kristian Engstad
2002-10-17  0:12             ` Eray Ozkural
2002-10-17  9:34               ` Diego Olivier Fernandez Pons
2002-10-17 15:55                 ` Jeffrey Palmer
2002-10-17 16:15                   ` brogoff
2002-10-17 18:21                   ` [Caml-list] Re: Camlp4 optimizations (was: productivity improvement) Christophe TROESTLER
2002-10-17 18:32                     ` Chris Hecker
2002-10-17 19:08                       ` Shivkumar Chandrasekaran
2002-10-17 20:01                         ` Chris Hecker
2002-10-17 19:36                       ` Daniel de Rauglaudre
2002-10-17 19:59                       ` Brian Hurt
2002-10-17 20:22                         ` Chris Hecker
2002-10-17 21:19                           ` Brian Hurt
2002-10-17 21:37                             ` Jeffrey Palmer
2002-10-17 23:55                               ` Alessandro Baretta
2002-10-18  0:57                                 ` Jeffrey Palmer
2002-10-18  4:21                                   ` Alessandro Baretta
2002-10-18  8:23                                     ` Remi VANICAT
2002-10-18  8:46                                       ` Sven Luther
2002-10-18  1:47                               ` Brian Hurt
2002-10-17 23:03                             ` Chris Hecker
2002-10-18 23:55                               ` brogoff
2002-10-18 10:43                   ` [Caml-list] productivity improvement Diego Olivier Fernandez Pons
2002-10-21  8:57                   ` Francois Pottier
     [not found] ` <200207200640.CAA11477@dewberry.cc.columbia.edu>
     [not found]   ` <3D391B41.50900@baretta.com>
     [not found]     ` <200207210059.UAA17003@dewberry.cc.columbia.edu>
2002-07-21 13:00       ` [Caml-list] Rule based language [was: productivity improvement] Alessandro Baretta
2002-07-23  9:53         ` Oleg
2002-07-24  8:07           ` Alessandro Baretta
     [not found] <200207092004.QAA09587@psi-phi.mit.edu>
2002-07-09 20:16 ` [Caml-list] productivity improvement Oleg
2002-07-08 19:53 Oleg
2002-07-08 20:14 ` Michael Vanier
2002-07-10 15:50   ` John Max Skaller
2002-07-10 18:56     ` Alessandro Baretta
2002-07-10 19:09       ` Jun P.FURUSE
2002-07-11 23:43         ` Pierre Weis
2002-07-09 12:45 ` Basile STARYNKEVITCH
2002-07-09 18:20   ` Shannon --jj Behrens
2002-07-09 19:16     ` Oleg
2002-07-09 20:31       ` Shannon --jj Behrens
2002-07-10 10:02     ` sebastien FURIC
2002-07-10 11:58       ` Dave Mason
2002-07-10 13:11         ` sebastien FURIC
2002-07-10 19:22           ` nadji
2002-07-10 15:39 ` John Max Skaller
2002-07-11  8:57   ` Nicolas barnier
2002-07-16  3:34   ` Oleg
2002-10-18  3:13     ` Eray Ozkural

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200210151808.17342.erayo@cs.bilkent.edu.tr \
    --to=erayo@cs.bilkent.edu.tr \
    --cc=caml-list@inria.fr \
    --cc=oleg_inconnu@myrealbox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).