3.15.4.5@hermano.com.br:~$ ls ./estudos/redes_neurais/Perceptron
.. 00-leia.txt neuronio-artificial.jpg neuronio.jpg perceptron.txt
3.15.4.5@hermano.com.br:~$ cat ./estudos/redes_neurais/Perceptron/perceptron.txt
#!/usr/bin/perl
# Perceptron
# 06/11/2009
# Autor: Hermano Pereira
# www.hermano.com.br
use strict;
my $wb = 0; # peso de bias
my $w1 = 0; # peso 1
my $w2 = 0; # peso 2
my $e1 = " "; # entrada 1 (binario)
my $e2 = " "; # entrada 2 (binario)
my $ne = " "; # nome de entrada
my $re = " "; # resultado esperado
my $se = " "; # saida
my $bias = 1;
my $v = 0; # resultado da soma ponderada
my $t = "";
my $erro = 0;
my $vez = 0;
my $iteracao = 0;
my $taxa = 0.05; # taxa de aprendizagem
&imprimerede ($wb,$w1,$w2,$e1,$e2,$ne,$re,$se,$t);
while (1) {
$iteracao++;
print "\n ".$iteracao."a iteracao!\n\n";
print " Digite o nome da pessoa de entrada (Paulo,Joao,Tiago,Pedro)...........: ";
$ne = <STDIN>;
chomp($ne);
print "\n Digite o resultado esperado (Analista,Tecnico,NaoSei).................: ";
$re = <STDIN>;
chomp($re);
if ($ne =~ /paulo/ig) { $e1 = 0; $e2 = 0; }
if ($ne =~ /joao/ig) { $e1 = 0; $e2 = 1; }
if ($ne =~ /tiago/ig) { $e1 = 1; $e2 = 0; }
if ($ne =~ /pedro/ig) { $e1 = 1; $e2 = 1; }
if ($re =~ /analista/ig) { $se = 0; }
if ($re =~ /tecnico/ig) { $se = 1; }
$t = "";
&imprimerede ($wb,$w1,$w2,$e1,$e2,$ne,$re,$se,$t);
print "\nCalculando ...\n";
$v = $wb * $bias + $w1 * $e1 + $w2 * $e2;
if ($v > 0) { $t = 1; } else { $t = 0; }
sleep 1;
&imprimerede ($wb,$w1,$w2,$e1,$e2,$ne,$re,$se,$t);
sleep 1;
if ($re =~ /naosei/ig) { $se = $t; }
if ($se != $t) {
$erro = $se - $t;
$vez++;
print "\nRecalculando pesos (".$vez."a vez)... \n";
$wb = $wb + $taxa * $erro * $bias;
$w1 = $w1 + $taxa * $erro * $e1;
$w2 = $w2 + $taxa * $erro * $e2;
sleep 1;
}
$e1 = " ";
$e2 = " ";
$ne = " ";
$re = " ";
$se = " ";
$t = "";
&imprimerede ($wb,$w1,$w2,$e1,$e2,$ne,$re,$se,$t);
sleep 1;
}
sub imprimerede {
my $wb = $_[0];
my $w1 = $_[1];
my $w2 = $_[2];
my $e1 = $_[3];
my $e2 = $_[4];
my $ne = $_[5];
my $re = $_[6];
my $se = $_[7];
my $t = $_[8];
my $resultado = "";
if ($t ne "" && $t == 0) { $resultado = "Analista"; }
if ($t ne "" && $t == 1) { $resultado = "Tecnico"; }
print "\n----------------------------------------------------------\n\n";
print " Entrada : $ne ($e1,$e2)\n";
print " Resultado esperado: $re ($se)\n\n";
print " (1) -------> (BIAS) ---wb=".&preenche($wb,7,"-")."--\\ \n";
print " (".$e1.") -------> (NRE1) ---w1=".&preenche($w1,7,"-")."-- > (NRS1) ---= $t - $resultado \n";
print " (".$e2.") -------> (NRE2) ---w2=".&preenche($w2,7,"-")."--/ \n";
print "\n----------------------------------------------------------\n";
}
sub preenche {
my $texto = $_[0];
my $tamanho = $_[1];
my $caractere = $_[2];
my $lado = $_[3];
if ($caractere eq "") {
$caractere = " ";
}
while (length($texto) < $tamanho) {
if ($lado eq "e") {
$texto = $caractere.$texto;
} else {
$texto .= $caractere;
}
}
return $texto;
}
3.15.4.5@hermano.com.br:~$ clear_