AI-NeuralNet-Kohonen-Demo-RGB
view release on metacpan or search on metacpan
12345678910111213141516AI/NeuralNet/Kohonen/Demo/RGB version 0.01
==========================================
$_
= 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
6789101112131415161718192021222324=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;
47484950515253545556575859606162636465666768697071use
Tk;
use
Tk::Canvas;
use
Tk::Label;
#
# 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} ),
107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
);
}
}
}
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}) {
1415161718192021222324252627282930313233343536373839404142434445464748495051525354
[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 1.126 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )