AI-NeuralNet-Kohonen-Demo-RGB
view release on metacpan or search on metacpan
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 => [
return;
}
$self->{t}++; # Measure epoch
my $target = $self->_select_target;
my $bmu = $self->find_bmu($target);
$self->_adjust_neighbours_of($bmu,$target);
$self->_decay_learning_rate;
$self->tk_show;
$label_txt = sprintf("Epoch: %04d",$self->{t})." "
. "Learning: $self->{l} "
. sprintf("BMU: %02d,%02d",$bmu->[1],$bmu->[2])." "
. "Target: [".join(",",@$target)."] "
;
$self->{c}->update;
$l->update;
DoOneEvent(DONT_WAIT); # be kind and process XEvents if they arise
}
$label_txt = "Did $self->{t} epochs: now smoothed by "
.($self->{smoothing}? $self->{smoothing} : "default amount");
$_->smooth;
# MainLoop;
( run in 2.160 seconds using v1.01-cache-2.11-cpan-de7293f3b23 )