Escolar Documentos
Profissional Documentos
Cultura Documentos
A7 - IA
A7 - IA
ARTIFICIAL
Introdução
Neste capítulo, você estudará os elementos e as notações principais
das redes neurais artificiais, bem como suas estruturas e um algoritmo
utilizado nessas redes e suas características.
Sentido de propagação
Corpo
Axônio Nodo de Ranvier
Bainha de mielina
–θ
x1
x2 u y
xn
Peso em diagonal
a0 = 1 aj = g(inj)
w0j
g
inj
wij
ai
Σ aj
n
a j = g (in j ) = g ∑ wi , j ai
i=0
w1,3
1 3
w1,4
w2,3
2 w2,4 4
Figura 3. Rede de camada única simples de duas entradas com duas interligações.
Quadro 1. Exemplo de uma rede neural artificial de camada única que funciona como um
classificador binário simples
x1 x2 f(x)1 f(x)2
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
Entradas
x1
w1
x2
w2 Σ u Saída (y)
w1,3 w3,5
1 3 5
w1,4 w3,6
w2,3 w4,5
2 w2,4 4 w4,6 6
…
…
…
Camada Primeira Segunda Camada
de entrada camada oculta camada oculta de saída
Figura 6. Construção da estrutura de multicamada.
Redes neurais artificiais I
7
8 Redes neurais artificiais I
Na Figura 7, você pode ver outras estruturas das redes artificiais de maior
complexidade, que derivam das redes de camada única e de multicamadas.
Figura 7. Redes artificiais de maior complexidade, derivadas das redes de camada única
e de multicamada.
Fonte: Van Veen e Leijnen (2016, documento on-line).
Redes neurais artificiais I 9
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Implementação Perceptron
import sys
import random
class Perceptron:
## Primeira função de uma classe (método construtor de objetos)
## self é um parâmetro obrigatório que receberá a instância criada
def _ _ init _ _ (self, amostras, saidas, taxa _ aprendizado=0.1,
épocas = 1000, limiar = 1)
self.amostras = amostras
self.saidas = saidas
self.taxa _ aprendizado = taxa _ aprendizado
self.epocas = epocas
self.limiar = limiar
self.n _ amostras = len(amostras) # número de linhas
(amostras)
self.n _ atributos = len(amostras[0]) # número de atributos
self.pesos = []
while True:
# Inicializar variável erro
# (quando terminar loop e erro continuar False, é porque não
tem mais diferença entre valor calculado e desejado
erro = False
# Para cada amostra...
for i in range(self.n _ amostras):
# Inicializar potencial de ativação
u = 0
# Para cada atributo...
for j in range(self.n _ atributos + 1):
# Multiplicar amostra e seu peso e também somar com o potencial
u += self.pesos[j] * self.amostras[i][j]
# Obter a saída da rede considerando g a função sinal
y = self.sinal(u)
# Verificar se a saída da rede é diferente da saída desejada
if y != self.saidas[i]:
# Calcular o erro
erro _ aux = self.saidas[i] - y
## Função sinal
def sinal(self, u):
if u >= 0:
return 1
return -1
Leituras recomendadas
COPPIN, B. Inteligência artificial. Rio de Janeiro: LTC, 2010. 664 p.
DROZDEK, A. Estrutura de dados e algoritmos em C++. 4. ed. São Paulo: Cengage Lear-
ning, 2017. 708 p.
PERKOVIC, L. Introdução à computação usando Python: um foco no desenvolvimento
de aplicações. Rio de Janeiro: LTC, 2016. 516 p.