Skip to content

Instantly share code, notes, and snippets.

@MuriloAkita
Last active October 3, 2023 01:27
Show Gist options
  • Save MuriloAkita/3f10aafb9a5c49604bc123024131e9cd to your computer and use it in GitHub Desktop.
Save MuriloAkita/3f10aafb9a5c49604bc123024131e9cd to your computer and use it in GitHub Desktop.
O Perceptron
"""
Perceptron feito em Python.
Por Murilo Akita
Github: https://github.com/MuriloAkita
"""
import numpy as np
class Perceptron:
def __init__(self, quantidadeEntrada, taxa_aprendizado=0.05):
self.peso = np.random.rand(quantidadeEntrada)
self.taxa_aprendizado = taxa_aprendizado
self.epoca = 0
def resultado(self, entrada):
soma_peso = np.dot(entrada, self.peso)
return 1 if soma_peso > 0 else -1
def treinar(self, amostrasObjeto, max_epocas=1000):
epoca = 0 # Inicializa o contador de épocas
while epoca < max_epocas:
erros = 0 # Contador de erros na época atual
for amostra in amostrasObjeto:
entrada = amostra[:-1]
resultadoEsperado = amostra[-1]
resultado = self.resultado(entrada)
erro = resultadoEsperado - resultado
if erro != 0:
self.peso += self.taxa_aprendizado * erro * np.array(entrada) # w + n * (d^k - y) * x^k
erros += 1
epoca += 1 # Incrementa o contador de épocas
if erros == 0:
self.epoca = epoca
break # Se não houver erros, encerra o treinamento
# Amostras fornecidas
amostras = [
[-1, 0.1, 0.4, 0.7, 1],
[-1, 0.5, 0.7, 0.1, 1],
[-1, 0.6, 0.9, 0.8, -1],
[-1, 0.3, 0.7, 0.2, -1]
]
perceptron = Perceptron(len(amostras[1])-1)
# Treinando o Perceptron
perceptron.treinar(amostras)
# Obtendo o número de épocas
epocas = perceptron.epoca
# Exibição dos resultados
for amostra in amostras:
entrada = amostra[:-1]
resultadoEsperado = amostra[-1]
resultado = perceptron.resultado(entrada)
print(f"Inputs: {entrada}, Resultado Esperado: {resultadoEsperado}, Resultado: {resultado}")
print(f"Número de épocas necessárias: {epocas}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment