AI-NeuralNet-SOM

 view release on metacpan or  search on metacpan

META.yml  view on Meta::CPAN

# http://module-build.sourceforge.net/META-spec.html
#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
name:         AI-NeuralNet-SOM
version:      0.07
version_from: lib/AI/NeuralNet/SOM.pm
installdirs:  site
requires:

distribution_type: module
generated_by: ExtUtils::MakeMaker version 6.30_01

lib/AI/NeuralNet/SOM.pm  view on Meta::CPAN

  print $nn->as_string;                # prepare a somehow formatted string

  use AI::NeuralNet::SOM::Torus;
  # similar to above

  use AI::NeuralNet::SOM::Hexa;
  my $nn = new AI::NeuralNet::SOM::Hexa (output_dim => 6,
                                         input_dim  => 4);
  $nn->initialize ( [ 0, 0, 0, 0 ] );  # all get this value

  $nn->value (3, 2, [ 1, 1, 1, 1 ]);   # change value for a neuron
  print $nn->value (3, 2);

  $nn->label (3, 2, 'Danger');         # add a label to the neuron
  print $nn->label (3, 2);


=head1 DESCRIPTION

This package is a stripped down implementation of the Kohonen Maps
(self organizing maps). It is B<NOT> meant as demonstration or for use

lib/AI/NeuralNet/SOM.pm  view on Meta::CPAN

	    map { _adjust ($self, $l, $sigma, $_, $sample) } @$neighbors;               # bend them like Beckham
	}
    }
    return @mes;
}

sub _adjust {                                                                           # http://www.ai-junkie.com/ann/som/som4.html
    my $self  = shift;
    my $l     = shift;                                                                  # the learning rate
    my $sigma = shift;                                                                  # the current radius
    my $unit  = shift;                                                                  # which unit to change
    my ($x, $y, $d) = @$unit;                                                           # it contains the distance
    my $v     = shift;                                                                  # the vector which makes the impact

    my $w     = $self->{map}->[$x]->[$y];                                               # find the data behind the unit
    my $theta = exp ( - ($d ** 2) / (2 * $sigma ** 2));                                 # gaussian impact (using distance and current radius)

    foreach my $i (0 .. $#$w) {                                                         # adjusting values
	$w->[$i] = $w->[$i] + $theta * $l * ( $v->[$i] - $w->[$i] );
    }
}

t/hexa.t  view on Meta::CPAN

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use Test::More qw(no_plan);
BEGIN { use_ok('AI::NeuralNet::SOM::Hexa') };

######

use Data::Dumper;

{
    my $nn = new AI::NeuralNet::SOM::Hexa (output_dim => 6,

t/hexa.t  view on Meta::CPAN


    ok (eq_array ( $nn->neighbors (0, 3, 3),
		   [
		    [3, 3, 0 ],
		   ]), 'neighbors 0+1');
}

{
    my $nn = new AI::NeuralNet::SOM::Hexa (output_dim => 3,
					   input_dim  => 3,
					   sigma0     => 4); # make change network-wide
    $nn->initialize ( [ 0, -1, 1 ] );
    $nn->train (100, [ 1, 1, 1 ]); 

#    warn Dumper $nn;

    foreach my $x (0 .. $nn->diameter -1) {
	foreach my $y (0 .. $nn->diameter -1 ) {
	    ok ( (! grep { $_ < 0.9 } @{ $nn->value ( $x, $y ) }) , "$x, $y: vector above 0.9");
	}
    }

t/rect.t  view on Meta::CPAN

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use Test::More qw(no_plan);
BEGIN { use_ok('AI::NeuralNet::SOM::Rect') };

######
use Data::Dumper;

{
    my $nn = new AI::NeuralNet::SOM::Rect (output_dim => "5x6",
					   input_dim  => 3);

t/torus.t  view on Meta::CPAN

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use Test::More qw(no_plan);
BEGIN { use_ok('AI::NeuralNet::SOM::Torus') };

######
use Data::Dumper;

{
    my $nn = new AI::NeuralNet::SOM::Torus (output_dim => "5x6",
					    input_dim  => 3);



( run in 0.625 second using v1.01-cache-2.11-cpan-c333fce770f )