import numpy as np
class Neuronio:
def __init__(self, entradas, pesos, bias=-0.5):
if len(entradas) != len(pesos):
raise ValueError(
f"ERRO:\n"
f" Número de Entradas : {len(entradas)}\n"
f" Número de Pesos: {len(pesos)}\n"
f" Número de Entradas e Pesos são DIFERENTES."
)
self.entradas = np.array(entradas)
self.pesos = np.array(pesos)
self.bias = bias
@property
def somatorio(self):
# Σ = (X1 * W1) + ... + (Xn * Wn)
return np.dot(self.entradas, self.pesos)
@property
def total(self):
# total = Σ + bias
return self.somatorio + self.bias
@property
def funcao_ativacao(self):
return 1 if self.total >= 0 else 0
@property
def saida(self):
return self.funcao_ativacao
def __str__(self):
"""Representação em string do neurônio - para print()"""
return (
f"NEURÔNIO ARTIFICIAL\n"
f"├── Entradas: {list(self.entradas.tolist())}\n"
f"├── Pesos: {list(self.pesos.tolist())}\n"
f"├── Bias: {self.bias}\n"
f"├── Somatório: {self.somatorio:.2f}\n"
f"├── Total: {self.total:.2f}\n"
f"└── Saída: {self.saida} {'Ativado' if self.saida == 1 else 'Desativado'}"
)
def mostrar_calculo_detalhado(self):
print("=" * 50)
print("DETALHAMENTO")
print("=" * 50)
for i in range(len(self.entradas)):
calc = self.entradas[i] * self.pesos[i]
print(f"x{i+1} * w{i+1} = {self.entradas[i]} * {self.pesos[i]} = {calc:.2f}")
print(
f"NEURÔNIO ARTIFICIAL\n"
f"├── Entradas: {list(self.entradas.tolist())}\n"
f"├── Pesos: {list(self.pesos.tolist())}\n"
f"├── Bias: {self.bias}\n"
f"├── Somatório: {self.somatorio:.2f}\n"
f"├── Total: {self.total:.2f}\n"
f"└── Saída: {self.saida} {'Ativado' if self.saida == 1 else 'Desativado'}")
# TESTE
entradas = [1, 0, 0.8]
pesos = [0.9, 0.3, 0.7]
neuronio = Neuronio(entradas, pesos)
print(neuronio) # Automaticamente chama __str__
neuronio.mostrar_calculo_detalhado()
"""
NEURÔNIO ARTIFICIAL
├── Entradas: [1.0, 0.0, 0.8]
├── Pesos: [0.9, 0.3, 0.7]
├── Bias: -0.5
├── Somatório: 1.46
├── Total: 0.96
└── Saída: 1 Ativado
==================================================
DETALHAMENTO
==================================================
x1 * w1 = 1.0 * 0.9 = 0.90
x2 * w2 = 0.0 * 0.3 = 0.00
x3 * w3 = 0.8 * 0.7 = 0.56
NEURÔNIO ARTIFICIAL
├── Entradas: [1.0, 0.0, 0.8]
├── Pesos: [0.9, 0.3, 0.7]
├── Bias: -0.5
├── Somatório: 1.46
├── Total: 0.96
└── Saída: 1 Ativado
"""