AI:NNFlex & X squared
[email protected] ("Charles Colbourn") Sun, 20 Mar 2005 12:43:54 -0000 (GMT)
| Newsgroups | perl.ai |
|---|---|
| Message-ID | <[email protected]> |
Hi Jim,
Did you get my direct email on friday?
There's a couple of problems here:
1) You have a network of 3 layers, with a single layer in each node. A
neural net works by changing the weights between arrays of nodes. Having a
single node in each layer means you have something like this:
o->o->o
feeding activation into the left, it will flow through to the right, but
when you adjust the weights, you only have 1 pathway to choose from, so
the network won't learn. I've posted a very simple intro to how neural
nets work at:
http://www.g0n.net/nnflex/SimpleNNIntro.pdf
There's also an animated gif at http://www.g0n.net/nnflex/x.gif that might
help to make the structure of the net clear.
2) The second problem is that you are feeding analogue numbers into the net:
[0],[0],
[1/3],[1/9],
[2/3],[4/9],
[9/3],[9/9]
You need to have a number of input units (see point 1), and translate your
data into a binary format that a neural net can understand, like:
[0,0,0,0],[0,0,0,0],
[0,0,0,1],[0,0,0,1],
[0,0,1,0],[0,1,0,0]
[0,1,0,1],[1,0,0,1]
(These are 0->0, 1->1, 2->4 & 3->9)
etc. This assumes you have 4 input & 4 output nodes (and you'll probably
need 4 hidden nodes as well), which means you can represent numbers up to
15.
I'm not sure how well a simple backprop net will generalise x squared, it
may learn the examples you give it, but be unable to square a number it
hasn't seen before, although it might be possible to encode the data in a
way that will allow a certain amount of generalisation. I'll have to have
a think about that one and give it a try.
charles.
use strict;
use AI::NNFlex::momentum;
use AI::NNFlex::Dataset;
# Create the network
my $network = AI::NNFlex::momentum->new( learningrate=>.1,
bias=>1,
momentum=>0.6,
round=>1);
$network->add_layer( nodes=>1,
activationfunction=>"tanh");
$network->add_layer( nodes=>1,
activationfunction=>"tanh");
$network->add_layer( nodes=>1,
activationfunction=>"linear");
$network->init();
my $dataset = AI::NNFlex::Dataset->new([
[0],[0],
[1/3],[1/9],
[2/3],[4/9],
[9/3],[9/9]]);
my $counter=0;
my $err = 10;
while ($err >1.001)
{
$err = $dataset->learn($network);
print "Epoch $counter: Error = $err\n";
$counter++;
}
foreach (@{$dataset->run($network)})
{
foreach (@$_){print $_}
print "\n";
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com