Introdução a Inteligência Artificialmetaheuro.com.br › ... ›...

Preview:

Citation preview

Introdução aInteligência Artificial

Classificação de caracteres numéricos escritos a mão utilizando REDES NEURAIS

O PROBLEMA OU A APLICAÇÃO

Definição do problemaDados imagens de caracteres numéricos escritos a mão descritos em um arquivo texto numérico com valores entre 0 e 255, onde 0 (zero) corresponde a preto e 255 a branco (ESCALA DE CINZA) e os valores intermediários correspondem a escalas de cinza, um sistema de redes neurais deve identificar cada valor dentro de um intervalo de certeza razoável.

Exemplo de alguns caracteres

Formatação de cada

caractere numérico

Introdução a inteligência artificial (REDES NEURAIS)

ALVOArquivo MNIST (github)

Arquivo (lista) com imagens de 100 caracteres escritos a mão

com 28 x 28 pontos cada caractere (784 pontos)

No contexto dessa aplicação as redes neurais utilizam o sistema de aprendizado supervisionado.

Antes da realização de qualquer classificação, ou predição a rede deve ser treinada para reconhecer todos os padrões possíveis (rótulos ou aspectos) que podem ser aplicados a entrada

Nesse sistema uma massa de dados contendo uma série de conjuntos de informações específicas dos elementos que se deseja classificar ou prever, é aplicada a entrada da rede neural.

A meta do algoritmo de classificação é estimar com a maior probabilidade possível se um determinado conjunto de dados (pontos de imagem) de entrada corresponde a um aspecto ou rótulo específico.

Classificação e prediçãoProcesso de classificação não é muito diferente de um processo de predição uma vez que o sistema recebe uma entrada e faz uma predição de qual deve ser a saída.A predição é refinada pelo ajuste de parâmetros internos (as ponderações e polarizações no caso das redes neurais) através dos erros obtidos no processo de comparação com os rótulos ou aspectos

Tomemos como exemplo um processo de classificação de insetos encontrados comumente nos jardins.Queremos determinar se um novo inseto for incorporado ao grupo o mesmo é uma joaninha ou uma lagarta em função da largura e comprimento do mesmo.Para fazer isso devemos especificar um parâmetro de classificação que defina claramente a separação entre os dois grupos em função de seus pespectivoscomprimentos e larguras.

O treinamento para o estabelecimento de um parâmetro de classificação permite determinar se um novo inseto incorporado ao conjunto de insetos é uma joaninha ou uma lagarta.

A rede neural deve ser treinada para estabelecer as ponderações e polarizações necessárias para se obter parâmetros ótimos de classificação.

(Nesse caso específico temos um classificador linear).

Tabela de aspectos joaninhas lagartas

comprimento 1 3

largura 3 1

Exemplo muito simples do

treinamento das redes neurais utilizando um classificador

linear

𝐸𝑟𝑟𝑜𝑥=3 = 𝑡 − 𝑦 = 1,1 − 0,25 × 3 = 0,35 ⇒ Δ𝐴 =𝐸𝑟𝑟𝑜𝑥𝑥

=0,35

3= 0,1167

𝐸𝑟𝑟𝑜𝑥 = 𝑡 − 𝑦 = 𝐴 + Δ𝐴 𝑥 − 𝐴𝑥 = Δ𝐴 × 𝑥 ⇒ Δ𝐴 =𝐸𝑟𝑟𝑜𝑥𝑥

Ponto (3,1)

y = 0,25.x

0,25 arbitrário

Note que 0,25+0,1167 = 0,3667 = 1,1/3 que é a declividade da reta que passa por (x,y) = (0,0) e (x,y) = (3 , 1.1).

O treinamento da rede neural

𝑦𝑥=1 = 0,3667 × 1 = 0,3667 ⇒ 𝐸𝑟𝑟𝑜𝑥=1 = 2,9 − 0,3667 = 2,5333 ⇒ Δ𝐴 =𝐸𝑟𝑟𝑜𝑥=1

1= 2,5333

O treinamento da rede neural

y=2,5333.x

Portanto o classificador linear com o uso do critério analisado é dado pela expressão:

Classificador refinado

O treinamento da rede neural

Vamos revisar o mesmo problema introduzindo uma taxa de aprendizado L no processo.

Δ𝐴 = 𝐿𝐸𝑟𝑟𝑜

𝑥Vamos adotar L=0,5 e voltar a passo inicial anterior:No ponto (1,3) (x=3, y=0,25.3=0,75

Δ𝐴 = 0,51,1 − 0,75

3= 0,0583

𝐴𝑛𝑜𝑣𝑜1 = 0,25 + 0,0583 = 0,3085 ⇒ 𝑦𝑛𝑜𝑣𝑜𝑥=3 = 0,3085 × 3 = 0,9350

Esse valor de y é menor que 1,1 o que significa que esse coeficiente de reta é uma mau classificador linear.

Digite a equação aqui.Vamos verificar o ponto (1,3) onde x=1 com Ainicial=0,3085

𝑦𝑥=1 = 0,3085 × 1 = 0,3085

Δ𝐴 = 0,52,9 − 0,3085

1= 1,2958

𝐴𝑛𝑜𝑣𝑜2 = 0,3085 + 1,2958 ⇒ 𝑦𝑛𝑜𝑣𝑜𝑥=1 = 1,6043

O treinamento

da rede neural

A TEORIA QUE SUPORTA A SOLUÇÃOIntrodução as redes neurais

Nas redes neurais as poderações (pesos) e a polarizações (biases) iniciais são definidas arbitrariamente por um processo aleatório (randômico) que pode (e é) ser gerado por software.Uma vez estabelecidos esses parâmetros, ele são ajustados continuamente na fase de treinamento pra minimizar sua capacidade de detectar cada rótulo definido previamente (APRENDIZADO SUPERVISIONADO). Cada rótulo ou aspecto de saída deve ser fornecido nessa fase para evitar enganos da rede neural. Note que o processo de identificação ou previsão é probabilístico.

Na fase de identificação cada aspecto possível recebe um valor relativo a probabilidade de que possa ser um determinado aspecto, ao final o algoritmo escolhe o aspecto de maior probabilidade como sendo o possível resultado da classificação.

As Redes Neurais podem cometer e cometem erros e isso pode ser medido relacionando as taxas de acerto em relação aos erros, o que gera um valor de desempenho que pode ser porcentual, quais mais próximo de 100% melhor é o desempenho da rede neural.

A rede estudada nesse curso não utiliza de parâmetros de polarizações bij, mas apenas de ponderações ou pesos wij

Os parâmetros wij são ajustados continuamente no processo de treinamento da rede neural, de modo que cada aspecto possível de entrada fica muito bem definido por um determinado grupo de parâmetros wij.

Rede Neural com 3 camadas de entrada, 3 camadas

escondidas e 3 camadas de saída

Wih são as ponderações (pesos) entre a camada de entrada e a camada de saídaWho são as ponderações entre as camadas escondidas e as camadas de saída

Topologia de uma rede neural de 3 camadas de entrada, 3 camadas escondidas e 3 camadas de saída

Preparaçãopara o

treinamentoda rede

𝒙𝒉𝟏 = 𝒘𝒊(𝟏,𝟏)𝑰𝟏 +𝒘𝒊(𝟐,𝟏)𝑰𝟐 +𝒘𝒊(𝟑,𝟏)𝑰𝟑

𝒙𝒉𝟐 = 𝒘𝒊(𝟏,𝟐)𝑰𝟏 +𝒘𝒊(𝟐,𝟐)𝑰𝟐 +𝒘𝒊(𝟑,𝟐)𝑰𝟑

𝒙𝒉𝟑 = 𝒘𝒊(𝟏,𝟑)𝑰𝟏 +𝒘𝒊(𝟐,𝟑)𝑰𝟐 +𝒘𝒊(𝟑,𝟑)𝑰𝟑

Produto escalar(dot product) da camada escondida(inputs hidden)

Informações de entrada

para treinamento

𝑥ℎ1𝑥ℎ2𝑥ℎ3

=

𝑤𝑖(1,1) 𝑤𝑖(2,1) 𝑤𝑖(3,1)

𝑤𝑖(1,2) 𝑤𝑖(2,2) 𝑤𝑖(3,2)

𝑤𝑖(1,3) 𝑤𝑖(2,3) 𝑤𝑖(3,3)

𝐼1𝐼2𝐼3

Matricialmente, temos:

𝒙𝒉𝟏, 𝒙𝒉𝟐 e 𝒙𝒉𝟏Correspondem as inputs hidden da rede neural e são os valores que devem entrar na primeira função de

ativação

A maior ou menor significância do valor definido pela soma dos produtos das ponderações e as variáveis a elas associados é definido pela função de ativação. A função de ativação define a relevância do valor introduzido em um determinado nó ou camada, por suas respectivas entradas (e valores dos parâmetros de ponderação).

𝒚𝒊𝒉𝟏 =𝟏

𝟏 + 𝒆−𝒙𝒉𝟏

𝒚𝒊𝒉𝟐 =𝟏

𝟏 + 𝒆−𝒙𝒉𝟐

𝒚𝒊𝒉𝟑 =𝟏

𝟏 + 𝒆−𝒙𝒉𝟑

A função de ativação e as

inputs hidden

Camada escondida(hidden layer)

Funções de ativação das

inputs hidden

𝒙𝒉𝟏 = 𝒘𝒊(𝟏,𝟏)𝑰𝟏 +𝒘𝒊(𝟐,𝟏)𝑰𝟐 +𝒘𝒊(𝟑,𝟏)𝑰𝟑𝒙𝒉𝟐 = 𝒘𝒊(𝟏,𝟐)𝑰𝟏 +𝒘𝒊(𝟐,𝟐)𝑰𝟐 +𝒘𝒊(𝟑,𝟐)𝑰𝟑𝒙𝒉𝟑 = 𝒘𝒊(𝟏,𝟑)𝑰𝟏 +𝒘𝒊(𝟐,𝟑)𝑰𝟐 +𝒘𝒊(𝟑,𝟑)𝑰𝟑

𝒚 =𝟏

𝟏 + 𝒆−𝒙Quanto maior x, menor é o gradiente e menor é a aprendizagem

A sigmoide

As regiões relacionadas a sigmoide sigmoide

Fora da faixa de atuação da função de ativação

𝒚 =𝟏

𝟏 + 𝒆−𝒙A função de ativação opera entre os valores 0 e 1

y

x

A relação entre a camada escondida e a camada de saída

𝒚𝒐𝟏 =𝟏

𝟏 + 𝒆−𝒙𝒉𝒐𝟏

𝒚𝒐𝟐 =𝟏

𝟏 + 𝒆−𝒙𝒉𝒐𝟐

𝒚𝒐𝟑 =𝟏

𝟏 + 𝒆−𝒙𝒉𝒐𝟑

A função de ativação e as

saídas (outputs)

Camada escondida(hidden layer)

𝒙𝒉𝒐𝟏 = 𝒘𝒉(𝟏,𝟏)𝒚𝒊𝒉𝟏 +𝒘𝒉(𝟐,𝟏)𝒚𝒊𝒉𝟐 +𝒘𝒉(𝟑,𝟏)𝒚𝒊𝒉𝟑𝒙𝒉𝒐𝟐 = 𝒘𝒉(𝟏,𝟐)𝒚𝒊𝒉𝟏 +𝒘𝒉(𝟐,𝟐)𝒚𝒊𝒉𝟐 +𝒘𝒉(𝟑,𝟐)𝒚𝒊𝒉𝟑𝒙𝒉𝒐𝟑 = 𝒘𝒉(𝟏,𝟑)𝒚𝒊𝒉𝟏 +𝒘𝒉(𝟐,𝟑)𝒚𝒊𝒉𝟐 +𝒘𝒉(𝟑,𝟑)𝒚𝒊𝒉𝟑

Funções de ativação das

saídas

O efeito dos erros sobre os parâmetros de ponderação na

fase de treinamento

O ajuste dos parâmetros de ponderação é realizado até que o erro seja zero, mas é óbvio

que o comportamento dos parâmetros de ponderação não é linear, mas sim um grupo de

funções complexas interdependentes e portanto esse ajuste deve ser feito utilizando

técnicas de otimização.

Em geral os processos de otimização são realizados no espaço L2 (Espaço de Hilbert -> Topologia matemática e espaços funcionais) que em geral está relacionado com a energia dos sinais, mas nesse caso é

utilizado no processo de otimização para obtenção dos valores de ponderações das redes neurais.

Portanto a preocupação aqui é minimizar a expressão:

𝐸𝑘2 = 𝑡𝑘 − 𝑂𝑘

2

De modo que:

𝝏𝒇(𝑬𝟐)

𝝏𝒘𝒋𝒌=𝝏𝒇(𝒕𝒌 − 𝒐𝒌)

𝟐

𝝏𝒘𝒋𝒌= 𝟎

O ajuste dos parâmetros de ponderaçãoO ajuste é feito pela minimização do erro entre os valores de saída de

cada camada e o alvo ou valores intermediários definidos por esse alvo

Um método bastante utilizado para a execução disso é uma variação do método de Newton-Rapson denominado GRADIENT DESCENT.

Se a inclinação do gradiente (derivada em termos planos) for menor que zero os passos deve avançar, ou seja:

𝑥𝑖+1 = 𝑥𝑖 + 𝑝𝑎𝑠𝑠𝑜𝑑𝑦

𝑑𝑥< 0Se Então:

Se a inclinação do gradiente (derivada em termos planos) for menor que zero os passos deve avançar, ou seja:

𝑥𝑖+1 = 𝑥𝑖 − 𝑝𝑎𝑠𝑠𝑜𝑑𝑦

𝑑𝑥> 0Se Então:

𝑑𝑦

𝑑𝑡=0

Corresponde a um mínimo,

porém esse mínimopode ser um mínimolocal.

Função com dois mínimos locais além

do mínimo global dentro da faixa

operacional

[-5,+5]

A busca por um mínimo global de um grupo de dados pode caracterizar-se como uma funçãode fácil definição (testes), ou de difícil definição (até mesmo impossível) é tema de uma sériede algoritmos de otimização, entre os quais podemos destacar, alem do método do gradiente:a) Algoritmos genéticos -> baseados na teoria da evolução via mutação cromossômica.b) Busca de harmonia -> baseado em adaptação musical de bandas de jazz.c) Algoritmos das formigas -> baseado no comportamento das formigasd) Algoritmo dos pirilampos -> baseados no comportamento dos vagalumese) etc

Comportamento do método do gradiente descent

A aplicação do método do gradiente descente para a minimização do erro das redes neurais em relação aos parâmetro de ponderação.

Queremos minimizar: 𝑓 𝐸2 = 𝑓(𝑡𝑘 − 𝑜𝑘)2

Onde tk é o aspecto alvo k e ok é a saída k da rede neural.

Aplicando o método do gradient descent

𝝏𝒇(𝑬𝟐)

𝝏𝒘𝒋𝒌=𝝏𝒇(𝒕𝒌 − 𝒐𝒌)

𝟐

𝝏𝒘𝒋𝒌= 𝟎

𝝏𝒇(𝒕𝒌 − 𝒐𝒌)𝟐

𝝏𝒘𝒋𝒌= −𝟐(𝒕𝒌 − 𝒐𝒌)

𝝏𝒐𝒌𝝏𝒘𝒋𝒌

𝒐𝒌 =𝟏

𝟏 + 𝒆− σ𝒋𝒘𝒋𝒌𝒐𝒋= 𝒔𝒊𝒈𝒎𝒐𝒊𝒅

𝒋

𝒘𝒋𝒌 𝒐𝒋Onde:

𝝏𝒇(𝒕𝒌−𝒐𝒌)𝟐

𝝏𝒘𝒋𝒌= −𝟐(𝒕𝒌 − 𝒐𝒌)

𝝏

𝝏𝒘𝒋𝒌𝒔𝒊𝒈𝒎𝒐𝒊𝒅 σ𝒋𝒘𝒋𝒌 𝒐𝒋

Portanto:

𝝏𝒇(𝒕𝒌 − 𝒐𝒌)𝟐

𝝏𝒘𝒋𝒌= −𝟐(𝒕𝒌 − 𝒐𝒌)

−𝟏

𝟏 + 𝒆− σ𝒋𝒘𝒋𝒌𝒐𝒋𝟐

𝝏 𝒆− σ𝒋𝒘𝒋𝒌𝒐𝒋

𝝏𝒘𝒋𝒌

𝝏𝒇(𝒕𝒌 − 𝒐𝒌)𝟐

𝝏𝒘𝒋𝒌= − 𝒕𝒌 − 𝒐𝒌 × 𝒔𝒊𝒈𝒎𝒐𝒊𝒅

𝒋

𝒘𝒋𝒌𝒐𝒋 × 𝟏 − 𝒔𝒊𝒈𝒎𝒐𝒊𝒅

𝒋

𝒘𝒋𝒌𝒐𝒋 × 𝒐𝒋 = 𝟎

INTRODUÇÃO A PARTE INICIAL EM TERMOS NUMÉRICOS

FA=Função de Ativação

𝑥ℎ1′

𝑥ℎ2′

𝑥ℎ3′

=0,7 0,2 0,40,2 0,8 0,60,1 0,3 0,2

0,90,10,8

=0,970,740,28

=0,97

=0,74

=0,28

Operações nacamada

escondida:A soma das

ponderações e os nós de entrada

Dentro da camada escondida

𝒙𝒉𝟏 = 𝟏 + 𝒆−𝟎,𝟗𝟕 = 1,379𝒙𝒉𝟐 = 𝟏 + 𝒆−𝟎,𝟕𝟒 = 𝟏, 𝟒𝟕𝟕𝒙𝒉𝟑 = 𝟏 + 𝒆−𝟎,𝟐𝟖 = 𝟏, 𝟕𝟓𝟔

=1,379

=1,477

=1,756

A matemáticapor traz das

redes neurais: A função de ativação da

camadaescondida

Dentro da camada escondida

𝑥𝑜1′

𝑥𝑜2′

𝑥𝑜3′

=

𝑤𝑜ℎ(1,1) 𝑤𝑜ℎ(1,2) 𝑤𝑜ℎ(1,3)𝑤𝑜ℎ(2,1) 𝑤𝑜ℎ(2,2) 𝑤𝑜ℎ(2,3)𝑤𝑜ℎ(3,1) 𝑤𝑜ℎ(3,2) 𝑤𝑜ℎ(3,3)

𝑥ℎ1𝑥ℎ2𝑥ℎ3

𝑥𝑜1′

𝑥𝑜2′

𝑥𝑜3′

=0,1 0,3 0,40,5 0,4 0,10,4 0,7 0,55

1,3791,4771,756

=1,2841,4562,551

Funções de ativação da camada de saída

𝑭𝑨𝒐𝟏 ⇒ 𝒙𝒐𝟏 =𝟏

𝟏 + 𝒆−𝟏,𝟐𝟖𝟒= 𝟎, 𝟕𝟖𝟑𝟏

𝑭𝑨𝒐𝟐 ⇒ 𝒙𝒐𝟏 =𝟏

𝟏 + 𝒆−𝟏,𝟒𝟓𝟔= 𝟎, 𝟖𝟏𝟎𝟗

𝑭𝑨𝒐𝟑 ⇒ 𝒙𝒐𝟏 =𝟏

𝟏 + 𝒆−𝟐,𝟓𝟓𝟏= 𝟎, 𝟗𝟐𝟕𝟔

Produto da matriz de Ponderações entre as camadas escondida e de saída e a saída da camada escondida

A LINGUAGEM PYTHON

A PYTHON é uma linguagem interpretada (a linguagem C é compilada) construída sobre a linguagem C.

A linguagem é suportada (pode ser utilizada) pelos sistemas operacionais WINDOWS, LINUX e MAC (Aple)E contém uma quantidade apreciável de pacotes de suporte, sendo os principais, os principais:

➢ NUMPY – Suporta uma gama bastante grande de operações numéricas e de abertura e salvamento de arquivos

➢ SCIPY – Complementa a NUMPY➢ MATPLOTLIB – É uma biblioteca de suporte a operações gráficas bi e

tridimensionais.

𝑵𝑼𝑴𝑷𝒀 + 𝑺𝑪𝑰𝑷𝒀 + 𝑴𝑨𝑻𝑷𝑳𝑶𝑻𝑳𝑰𝑩 ≅ 𝑴𝑨𝑻𝑳𝑨𝑩 (𝒃á𝒔𝒊𝒄𝒐)

Porém PYTHON é gratuíta

A PYTHON suporta tanto a programação baseada emobjetos como a programaçãobaseada em procedimentos

ESPECIFICAÇÃO E INSTANCIAMENTO DA REDE NEURALCamadas de entrada (input layers)=784 (número pontos de cada caractere do arquivo de imagem )

Camadas escondidas (hidden layers)=200Camadas de saída (output layers)=10 (conjunto dos caracteres numéricos)

Taxa de aprendizado da rede neural (learning_rate)=0.3

# número de nós de entrada, escondidos e de saídainput_nodes = 784hidden_nodes = 200output_nodes = 10

# Define a taxa de aprendizadolearning_rate = 0.03

# Crie uma instância da rede neuraln = neuralNetwork(input_nodes,hidden_nodes,output_nodes, learning_rate)

28 pontos

28 pontos

Imagem de um caractere numérico com 28 pontos de altura e 28 pontos de largura em escala de cinza, ou seja cada pixel da imagem tem intensidade entre 0 (preto) e 255 (branco).O número total de pontos é 28 x 28 = 784

➢ Carregar o arquivo de dados de treinamento➢ Passe o arquivo para a forma de lista e salve-o➢ Feche o arquivo

➢ Elimine as vírgulas da lista➢ Carregue todos valores da lista separando os a partir

posição da vírgula.➢ Leia o primeiro elemento da lista que corresponde ao

caractere efetivo que será usado para verificação do competência da rede neural.

➢ Fixe as entradas da rede neural ajustando todos os valores da lista para a faixa operacional da função de ativação.

➢ Gere um arranjo de zeros para o ALVO de saída (=10).➢ Fixe todos os valores do ALVO em 0.01.➢ Fixe todos os valores relativos ao valor correto do ALVO

em 0.99.➢ Treine a rede neural

Preparaçãopara o

treinamentoda rede

5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,18,18,18,126,136,175,26,166,255,247,127,0,0,0,0,0,0,0,0,0,0,0,0,30,36,94,154,170,253,253,253,253,253,225,172,253,242,195,64,0,0,0,0,0,0,0,0,0,0,0,49,238,253,253,253,253,253,253,253,253,251,93,82,82,56,39,0,0,0,0,0,0,0,0,0,0,0,0,18,219,253,253,253,253,253,198,182,247,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,156,107,253,253,205,11,0,43,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,1,154,253,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,253,190,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,190,253,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,241,225,160,108,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,240,253,253,119,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,186,253,253,150,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,93,252,253,187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,253,249,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,130,183,253,253,207,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,148,229,253,253,253,250,182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,114,221,253,253,253,253,201,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,66,213,253,253,253,253,198,81,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,171,219,253,253,253,253,195,80,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,172,226,253,253,253,253,244,133,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,253,253,253,212,135,132,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Imagens do caractere “5” e o conteúdo numérico relativo a primeira imagem.

9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,148,210,253,253,113,87,148,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,232,252,253,189,210,252,252,253,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,57,242,252,190,65,5,12,182,252,253,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,252,252,183,14,0,0,92,252,252,225,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,253,252,146,14,0,0,0,215,252,252,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,253,247,176,9,0,0,8,78,245,253,129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,232,252,176,0,0,0,36,201,252,252,169,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,252,252,30,22,119,197,241,253,252,251,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,231,252,253,252,252,252,226,227,252,231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,235,253,217,138,42,24,192,252,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,255,253,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,253,252,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,252,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,253,252,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,253,252,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,255,253,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,218,252,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,252,189,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,184,252,170,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,147,252,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Imagens do caractere “9” e o conteúdo numérico relativo a primeira imagem.

➢ Elimine as vírgulas da lista➢ Carregue todos valores da lista separando os a partir posição

da vírgula.➢ Leia o primeiro elemento da lista que corresponde ao caractere

efetivo que será usado para verificação do competência da rede neural.

➢ Fixe as entradas da rede neural ajustando todos os valores da lista para a faixa operacional da função de ativação.

➢ Gere as saídas da rede a partir das entrada utilizando a função de consulta (query).

➢ Leia a resposta mais provável fornecida pela rede a partir dos 10 nós de saída.

➢ Avalie o desempenho da rede neural comparando a resposta da mesma com o elemento efetivo fornecido pelo arquivo original.

➢ Carregar o arquivo de dados para classificação➢ Passe o arquivo para a forma de lista e salve-o➢ Feche o arquivo

CAMADA DE TÔPO DO

SISTEMA DE CLASSIFICAÇÂO UTILIZANDO A REDE NEURAL

TREINAMENTODurante o

treinamento as poderações são

ajustadas para um nível ótimo de

previsão.

CLASSIFICAÇÃOOs valoresótimos das

ponderaçõestreinadas sãoutilizados no processo de classificação

OPERAÇÃO DA REDE NEURAL

TREINAMENTO DA REDE NEURAL

#load o arquivo mnist para o treinamento da rede em uma lista#load o arquivo mnistf = open("D://NN_data/mnist100.txt", "r")training_data_list=f.readlines()f.close()

# treine a rede neural

# epochs é o número de vezes que o conjunto de dados de treinamento#é utlizado para treinamento

epochs = 10

for e in range(epochs):# Obtenha todos os records dos dados de treinamentofor record in training_data_list:

# separe os dados utilizando as vírgulas ‘ , ' all_values = record.split(',')# escalone os valores e desloque para uso com a função de ativaçãoinputs = (np.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01# obtenha os valores alvo das saídas fixando os em 0,99 e o restante do record em 0.01targets = np.zeros(output_nodes) + 0.01# all_values[0] é o rótulo dos valores corretos de cada record (all_values)targets[int(all_values[0])] = 0.99n.train(inputs, targets) #treine a rede neuralpass

pass

Definição dos pacotes a serem utilizados no programa.

Tabela de saídagerada pela rede

neural com as classificações

mais prováveis de cada charactere

analisado.

As três últimas classificações estão corretas, mas a primeira classificação está incorreta o que mostra que o desempenho da rede para essa taxa de aprendizado e esse valor de epochs tem desempenho menor de um.

PERFORMANCE=0,96

3