--- Mark Kvale <[EMAIL PROTECTED]> wrote:
> a) AI::NeuralNet::Mesh - trains up multi-layer perceptrons, a type of
> feedforward neural net. It has good documentation. For your problem, I
> would reccommend a 3 layer net, with one input, one hidden and one
> output layer, with tanh activation fuctions.

Hi all,

Thanks to everyone for input.  I decided to start first with AI::NeuralNet::Mesh 
because it looks
easy, but so far, I can't seem to train my computer to learn binary.  Below my signoff 
is the full
program that I wrote.  Here are the results of my test run:

  Enter a four digit binary number (<ENTER> to quit): 0001
  0 0 0 1: 9
  Enter a four digit binary number (<ENTER> to quit): 0011
  0 0 1 1: 12
  Enter a four digit binary number (<ENTER> to quit): 1100
  1 1 0 0: 12
  Enter a four digit binary number (<ENTER> to quit): 1001
  1 0 0 1: 12
  Enter a four digit binary number (<ENTER> to quit): 1111
  1 1 1 1: 16
  Enter a four digit binary number (<ENTER> to quit): 0000
  0 0 0 0: 7

Is my problem that I have too small of a dataset from which the net can extrapolate 
results or is
it my failure to understand how the module functions?  So I have layers, nodes per 
layer, and
output nodes.  I believe "output nodes" corresponds to how many potential outputs can 
result from
one combination of inputs (each series of zeroes and ones represents one decimal 
number), but I
don't necessarily know what the other values do.  

Can you possibly give a brief explanation?  I know I won't get exact results from a 
neural net,
but I would like results that are close.

Cheers,
Ovid

#!/usr/bin/perl
use strict;

use AI::NeuralNet::Mesh;
my $net = AI::NeuralNet::Mesh->new(3,7,1);

if (!$net->load('binary.mesh')) {
    $net->learn_set([
        [qw/1 0 1 1/], [11],
        [qw/0 0 1 0/], [2 ],
        [qw/0 1 0 1/], [5 ],
        [qw/1 1 0 0/], [12],
        [qw/0 0 1 1/], [3 ],
        [qw/1 1 0 1/], [13],
        [qw/0 1 0 0/], [4 ],
        [qw/0 1 1 0/], [6 ],
        [qw/0 1 1 1/], [7 ],
        [qw/1 0 1 0/], [10],
        [qw/1 1 1 0/], [14],
        [qw/0 0 0 1/], [1 ],
        [qw/0 0 0 0/], [0 ],
        [qw/1 0 0 1/], [9 ],
    ]);
    $net->save('binary.mesh');
}

while (my $number = prompt()) {
    printf "@$number: %d\n", $net->run($number)->[0];
}

sub prompt {
    my $number;
    do {
        print "Enter a four digit binary number (<ENTER> to quit): ";
        $number = <>;
        chomp $number;
        exit unless $number;
    } until $number =~ /^[01]{4}$/;
    return [split //, $number];
}


=====
Silence is Evil            http://users.easystreet.com/ovid/philosophy/indexdecency.htm
Ovid                       http://www.perlmonks.org/index.pl?node_id=17000
Web Programming with Perl  http://users.easystreet.com/ovid/cgi_course/

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

Reply via email to