Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

LISTA DE EXERCICIOS 03 Perceptron Projeto Prático 
Enviar para ica@dee.ufc.br 
Assunto: Lista de Exercícios 03 André Luiz Ignácio de Almeida Filho - 
485304 
 
Faça o “Projeto Prático”, página 70, seção 3.6 do texto RNA para Eng., Ivan 
N da Silva, cap3, Perceptron.pdf disponível no SIGAA. 
O Apêndice I está disponível no SIGAA. 
Enviar em anexo: 
1. As respostas ao Projeto prático 
1) Execute cinco treinamentos para a rede Perceptron, iniciando-se o vetor 
de pesos {w} em cada treinamento com valores aleatórios entre zero e um. 
Se for o caso, reinicie o gerador de números aleatórios em cada treina- mento 
de tal forma que os elementos do vetor de pesos iniciais não sejam os mesmos. 
O conjunto de treinamento encontra-se no apêndice I
mailto:ica@dee.ufc.br
 
2) Registre os resultados dos cinco treinamentos na tabela 3.2 apresen- 
tada a seguir. 
 
Tabela 3.2 – Resultados dos treinamentos do Perceptron 
 
 
 
Treinamento 
Vetor de pesos iniciais Vetor de pesos finais 
Número de 
épocas 
w
0
 w
1
 w
2
 w
3
 w
0
 w
1
 w
2
 w
3
 
T1 0.4016 0.4429 0.4400 0.0817 1.6616 1.4676 2.1572 -0.7337 161 
T2 0.5278 0.4484 0.1016 0.9047 1.9078 1.3516 1.9892 -0.6799 160 
T3 0.7506 0.2206 0.0162 0.2437 2.0406 1.2912 1.9018 -0.6501 155 
T4 0.1111 0.0192 0.6143 0.0954 1.5311 1.5286 2.2354 -0.7623 158 
T5 0.4376 0.0287 0.7302 0.8884 1.8076 1.3908 2.066 -0.7016 142 
 
 
3) Após o treinamento do Perceptron, coloque este em operação, apli- 
cando-o na classificação automática das amostras de óleo da tabela 3.3, indi- 
cando ainda nesta tabela aqueles resultados das saídas (Classes) referentes aos 
cinco processos de treinamento realizados no item 1. 
 
Tabela 3.3 – Amostras de óleo para validar a rede Perceptron 
 
 
Amostra x
1
 x
2
 x
3
 
y 
(T1) 
y 
(T2) 
y 
(T3) 
y 
(T4) 
y 
(T5) 
1 -0,3665 0,0620 5,9891 -1 -1 -1 -1 -1 
2 -0,7842 1,1267 5,5912 +1 +1 +1 +1 +1 
3 0,3012 0,5611 5,8234 +1 +1 +1 +1 +1 
4 0,7757 1,0648 8,0677 +1 +1 +1 +1 +1 
5 0,1570 0,8028 6,3040 +1 +1 +1 +1 +1 
6 -0,7014 1,0316 3,6005 +1 +1 +1 +1 +1 
7 0,3748 0,1536 6,1537 -1 -1 -1 -1 -1 
8 -0,6920 0,9404 4,4058 +1 +1 +1 +1 +1 
9 -1,3970 0,7141 4,9263 -1 -1 -1 -1 -1 
10 -1,8842 -0,2805 1,2548 +1 +1 +1 +1 +1 
 
 
Universidade Federal do Ceará 
Centro de Tecnologia 
Departamento de Engenharia Elétrica 
Disciplina: Inteligência Computacional Aplicada 
 
 
 
 
4) Explique por que o número de épocas de treinamento, em relação a esta 
aplicação, varia a cada vez que executamos o treinamento do Perceptron. 
Já que a geração dos pesos é feita de maneira aleatória, o número de épocas 
varia a partir deles. Dependendo dos pesos gerados, ele pode levar mais ou 
menos iterações para convergir, os pesos sempre convergem para valores 
semelhantes. 
 
5) Para a aplicação em questão, discorra se é possível afirmar se as suas 
classes são linearmente separáveis. 
Levando em conta que para o treinamento da rede perceptron utilizado, só é 
possível treinar a rede para fronteiras lineares, ou seja, para classes linearmente 
separáveis, como foi possível treiná-la, podemos concluir que é linearmente 
separável. 
 
 
2 Programa de computação utilizado 
clc, clear all, close all 
 
data = xlsread('Tabela#Seção3.6_RNA.xls'); 
 
x1 = data(:,1); 
x2 = data(:,2); 
x3 = data(:,3); 
x0 = -1*ones(30,1); 
 
x = [x0 x1 x2 x3] 
 
d = data(:,4); 
 
[padroes, entradas] = size(x); 
 
w = rand(entradas, 1); 
w_t = w.'; 
 
fprintf('Limiar e pesos iniciais'); 
disp(w); 
 
n = 0.01; 
 
epocas = 0; 
 
 
Universidade Federal do Ceará 
Centro de Tecnologia 
Departamento de Engenharia Elétrica 
Disciplina: Inteligência Computacional Aplicada 
 
 
 
 
erro = 0; 
 
while(erro == 0) 
 erro = 1; 
 for i = 1:amostras 
 u = w_t*x(i,:).'; 
 y = sinal(u); 
 if y ~= d(i,:) 
 w_t = w_t + n*(d(i,:) - y)*x(i,:); 
 erro = 0; 
 end 
 end 
 epocas = epocas + 1; 
end 
 
 
Utilizei também o de um colega para algumas etapas: 
 
import numpy as np 
import pandas as pd 
 
data = pd.read_excel('Tabela.xls') 
x = np.array([-np.ones(data.shape[0]),data['x1'],data['x2'],data['x3']]).T 
y = (np.array(data['d'])>0).astype(np.float64) 
 
alpha, max_iter = .01, 10000 
 
def perceptron(x,y,alpha,w,it): 
 for i in range(it): 
 y_ = w@x.T > 0 
 erro = y - y_ 
 w = w + alpha * erro @ x 
 if np.all(erro==0): break 
 return w, i 
 
validation_x = np.array([ 
[-1,-0.3665,0.0620,5.9891], 
 
 
Universidade Federal do Ceará 
Centro de Tecnologia 
Departamento de Engenharia Elétrica 
Disciplina: Inteligência Computacional Aplicada 
 
 
 
[-1,-0.7842,1.1267,5.5912], 
[-1,0.3012,0.5611,5.8234], 
[-1,0.7757,1.0648,8.0677], 
[-1,0.1570,0.8028,6.3040], 
[-1,-0.7014,1.0316,3.6005], 
[-1,0.3748,0.1536,6.1537], 
[-1,-0.6920,0.9404,4.4058], 
[-1,-1.3970,0.7141,4.9263], 
[-1,-1.8842,-0.2805,1.2548]]) 
 
tabela2 = validation_x[:,1:] 
for i in range(5): 
 linha = np.array([]) 
 w0 = np.random.random(x.shape[1]) 
 w, it = perceptron(x,y,alpha,w0,max_iter) 
 #print(f'Treinamento {i+1}') 
 #print(f'w = {w}') 
 #print(f'Valor desejado = {y.astype(np.int32)}') 
 #print(f'Valor obtido = {(w@x.T>0).astype(np.int32)}') 
 #print(f'Total de iterações = {it}') 
 linha = np.concatenate([w0,w,[it]]) 
 y_ = 2*(w@validation_x.T>0)-1 
 tabela1 = [linha] if i == 0 else np.concatenate([tabela1, linha.reshape(1,-1)], 
axis=0) 
 tabela2 = np.concatenate([tabela2,(y_).reshape(-1, 1)], axis=1) 
df1 = pd.DataFrame(tabela1, index = [f'T{i+1}' for i in range(5)],columns = 
['w0','w1','w2','w3','w0','w1','w2','w3','epocas']) 
df2 = pd.DataFrame(tabela2, index = [i+1 for i in range(10) ],columns = 
['x1','x2','x3','y(T1)','y(T2)','y(T3)','y(T4)','y(T5)']) 
print(f'Tabela 1\n{df1}\n\n\nTabela 2\n{df2}')

Mais conteúdos dessa disciplina