Você está na página 1de 4

ATIVIDADE 7: CLASSIFICAÇÃO XNOR

Table of Contents
Introdução .......................................................................................................................... 1
Dados de entrada ................................................................................................................ 1
Definição da arquitetura da MLP ........................................................................................... 1
Inicialização dos pesos e bias ................................................................................................ 1
Parâmetros de treinamento .................................................................................................... 1
Treinamento da MLP ........................................................................................................... 1
Previsões da MLP ............................................................................................................... 2
Plotagem das regiões das classes ........................................................................................... 2
Plotagem do gráfico de erro x época ...................................................................................... 3
Conclusão .......................................................................................................................... 4

Introdução
Este é um exemplo de código MATLAB que treina uma MLP (Multi-Layer Perceptron) para se comportar
como uma porta lógica XNOR. A MLP é treinada usando o algoritmo de backpropagation para aprender
a classificar duas entradas binárias em duas classes distintas: Classe 0 e Classe 1.

Dados de entrada
X = [0 0; 0 1; 1 0; 1 1]; % Entradas
Y = [1; 0; 0; 1]; % Saídas esperadas

Definição da arquitetura da MLP


inputSize = 2; % Número de neurônios na camada de entrada
hiddenSize = 4; % Número de neurônios na camada oculta
outputSize = 1; % Número de neurônios na camada de saída

Inicialização dos pesos e bias


W1 = randn(inputSize, hiddenSize);
b1 = randn(1, hiddenSize);
W2 = randn(hiddenSize, outputSize);
b2 = randn(1, outputSize);

Parâmetros de treinamento
learningRate = 0.1; % Taxa de aprendizado
numEpochs = 10000; % Número de épocas de treinamento

Treinamento da MLP
errorHistory = zeros(numEpochs, 1); % Vetor para armazenar o histórico
de erro

1
ATIVIDADE 7: CLASSIFI-
CAÇÃO XNOR

for epoch = 1:numEpochs


% Forward pass
hiddenLayer = 1 ./ (1 + exp(-(X * W1 + b1))); % Ativação da camada
oculta
outputLayer = 1 ./ (1 + exp(-(hiddenLayer * W2 + b2))); % Ativação
da camada de saída

% Cálculo do erro
error = Y - outputLayer;
errorHistory(epoch) = sum(abs(error));

% Backpropagation
deltaOutput = error .* outputLayer .* (1 - outputLayer);
deltaHidden = deltaOutput * W2' .* hiddenLayer .* (1 -
hiddenLayer);

% Atualização dos pesos e bias


W2 = W2 + learningRate * hiddenLayer' * deltaOutput;
b2 = b2 + learningRate * sum(deltaOutput);
W1 = W1 + learningRate * X' * deltaHidden;
b1 = b1 + learningRate * sum(deltaHidden);
end

Previsões da MLP
x1_range = linspace(-0.5, 1.5, 100); % Faixa de valores para a entrada
1
x2_range = linspace(-0.5, 1.5, 100); % Faixa de valores para a entrada
2
[X1, X2] = meshgrid(x1_range, x2_range); % Criação da malha de pontos
para a superfície de separação
X_mesh = [X1(:) X2(:)]; % Transformação da malha em uma matriz de
entrada
hiddenLayer = 1 ./ (1 + exp(-(X_mesh * W1 + b1))); % Ativação da
camada oculta
outputLayer = 1 ./ (1 + exp(-(hiddenLayer * W2 + b2))); % Ativação da
camada de saída
predictions = outputLayer >= 0.5; % Classificação das previsões com
base no limiar de decisão de 0.5

Plotagem das regiões das classes


figure;
hold on;
contourf(X1, X2, reshape(predictions, size(X1)), 1); % Plotagem da
superfície de separação
scatter(X(Y==0, 1), X(Y==0, 2), 'ro', 'filled'); % Plotagem dos pontos
da Classe 0 em vermelho
scatter(X(Y==1, 1), X(Y==1, 2), 'bo', 'filled'); % Plotagem dos pontos
da Classe 1 em azul
title('Regiões das Classes');

2
ATIVIDADE 7: CLASSIFI-
CAÇÃO XNOR

xlim([-0.5 1.5]);
ylim([-0.5 1.5]);
xlabel('Entrada 1');
ylabel('Entrada 2');
grid on;

Plotagem do gráfico de erro x época


figure;
plot(1:numEpochs, errorHistory);
title('Erro x Época');
xlabel('Época');
ylabel('Erro');

3
ATIVIDADE 7: CLASSIFI-
CAÇÃO XNOR

Conclusão
Neste exemplo, uma MLP foi treinada com sucesso para se comportar como uma porta lógica XNOR. A
MLP aprendeu a classificar corretamente as duas classes distintas com base nas entradas fornecidas. A
superfície de separação plotada ilustra a capacidade da MLP de separar as duas classes. O gráfico de erro x
época mostra a convergência do algoritmo de treinamento e a redução gradual do erro ao longo das épocas.

Published with MATLAB® R2020a

Você também pode gostar