AI-NeuralNet-Kohonen-Demo-RGB
view release on metacpan or search on metacpan
AI/NeuralNet/Kohonen/Demo/RGB version 0.01
==========================================
use AI::NeuralNet::Kohonen::Demo::RGB;
$_ = AI::NeuralNet::Kohonen::Demo::RGB->new(
map_dim => 39,
epochs => 9,
table => "R G B"
."1 0 0"
."0 1 0"
."0 0 1",
);
$_->train;
exit;
A sub-class of "AI::NeuralNet::Kohonen" that Impliments extra methods
=head1 NAME
AI::NeuralNet::Kohonen::Demo::RGB - Colour-based demo
=head1 SYNOPSIS
use AI::NeuralNet::Kohonen::Demo::RGB;
$_ = AI::NeuralNet::Kohonen::Demo::RGB->new(
display_scale => 20,
display => 'hex',
map_dim => 39,
epochs => 9,
table => "R G B"
."1 0 0"
."0 1 0"
."0 0 1",
);
$_->train;
exit;
use Tk;
use Tk::Canvas;
use Tk::Label;
use Tk qw/DoOneEvent DONT_WAIT/;
#
# Used only by &tk_train
#
sub tk_show { my $self=shift;
for my $x (0..$self->{map_dim_x}){
for my $y (0..$self->{map_dim_y}){
my $colour = sprintf("#%02x%02x%02x",
(int (255 * $self->{map}->[$x]->[$y]->{weight}->[0])),
(int (255 * $self->{map}->[$x]->[$y]->{weight}->[1])),
(int (255 * $self->{map}->[$x]->[$y]->{weight}->[2])),
);
if ($self->{display} and $self->{display} eq 'hex'){
my $xo = ($y % 2) * ($self->{display_scale}/2);
my $yo = 0;
$self->{c}->create(
polygon => [
$xo + ((1+$x)*$self->{display_scale} ),
$yo + ((1+$y)*$self->{display_scale} ),
);
}
}
}
return 1;
}
=head1 METHOD train
Over-rides the base class to provide TK displays of the map
=cut
sub train { my ($self,$epochs) = (shift,shift);
my $label_txt;
$epochs = $self->{epochs} unless defined $epochs;
$self->{display_scale} = 10 if not defined $self->{display_scale};
$self->{mw} = MainWindow->new(
-width => 200+($self->{map_dim_x} * $self->{display_scale}),
-height => 200+($self->{map_dim_y} * $self->{display_scale}),
);
my $quit_flag = 0;
my $quit_code = sub {$quit_flag = 1};
$self->{mw}->protocol('WM_DELETE_WINDOW' => $quit_code);
$self->{c} = $self->{mw}->Canvas(
-width => 50+($self->{map_dim_x} * $self->{display_scale}),
-height => 50+($self->{map_dim_y} * $self->{display_scale}),
-relief => 'ridge',
-border => 5,
);
$self->{c}->pack(-side=>'top');
my $l = $self->{mw}->Label(-text => ' ',-textvariable=>\$label_txt);
$l->pack(-side=>'left');
# Replaces Tk's MainLoop
for (0..$self->{epochs}) {
[1,2,3]
],
);
ok( ref $_->{input}, 'ARRAY');
ok( $_->{input}->[0]->[0],1);
ok( $_->{input}->[0]->[1],2);
ok( $_->{input}->[0]->[2],3);
$_ = AI::NeuralNet::Kohonen::Demo::RGB->new(
map_dim => 39,
epochs => 3,
table=>
"R G B
1 0 0
0 1 0
0 0 1
",
);
ok( ref $_->{input}, 'ARRAY');
ok( $_->{input}->[0]->[0],1);
ok( $_->{input}->[0]->[1],0);
ok( $_->{input}->[0]->[2],0);
ok( $_->{weight_dim}, 2);
$_->train;
$_ = AI::NeuralNet::Kohonen::Demo::RGB->new(
display_scale => 10,
display => 'hex',
map_dim => 39,
epochs => 9,
table=>
"R G B
1 0 0
0 1 0
0 0 1
",
);
ok( ref $_->{input}, 'ARRAY');
ok( $_->{input}->[0]->[0],1);
( run in 0.899 second using v1.01-cache-2.11-cpan-49f99fa48dc )