Skip to content

Instantly share code, notes, and snippets.

@MuriloAkita
Created September 24, 2023 13:27
Show Gist options
  • Save MuriloAkita/abc72cd503d1f40e26c0a4c6b1548a71 to your computer and use it in GitHub Desktop.
Save MuriloAkita/abc72cd503d1f40e26c0a4c6b1548a71 to your computer and use it in GitHub Desktop.
Hopfield
"""
Hopfield feito em Python.
Por Murilo Akita
Github: https://github.com/MuriloAkita
"""
import numpy as np
class Hopfield:
def __init__(self, quantidadeEntrada):
self.matrizPeso = np.zeros((quantidadeEntrada, quantidadeEntrada))
self.quantidadeEntrada = quantidadeEntrada
self.peso = 0
self.resultadoRele = []
def treinar(self, amostras):
for l in range(self.quantidadeEntrada):
for c in range(self.quantidadeEntrada):
soma = amostras[:, l] * amostras[:, c]
self.matrizPeso[l, c] = np.sum(soma)
np.fill_diagonal(self.matrizPeso, 0)
print(self.matrizPeso)
def resultado(self, entrada):
resultado = entrada.T @ self.matrizPeso
self.resultadoRele = np.sign(resultado)
def entrada(self, entrada):
if len(entrada) != self.quantidadeEntrada:
return print('A quantidade de valores na entrada é diferente dos padrões no banco de dados.')
self.resultado(entrada)
print("Matriz Relé:\n", self.resultadoRele)
def compararAmostras(self, amostras):
menorDistancia = float('inf')
amostraSimilar = None
for amostra in amostras:
distancia = np.sum(np.abs(self.resultadoRele - amostra))
if distancia < menorDistancia:
menorDistancia = distancia
amostraSimilar = amostra
return amostraSimilar
amostras = np.array([
[ 1, -1, 1, 1, -1],
[-1, -1, -1, 1, 1],
[-1, 1, 1, 1, -1],
])
entrada = np.array([-1, -1, 1, 1, -1])
hopfield = Hopfield(len(amostras[0]))
hopfield.treinar(amostras)
hopfield.entrada(entrada)
amostraSimilar = hopfield.compararAmostras(amostras)
print("Amostra mais parecida:\n", amostraSimilar)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment