-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparidade-impar.py
68 lines (59 loc) · 2.04 KB
/
paridade-impar.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env python3
import numpy as np
import math
import sys
# exercício: implementar MLP xor usando um tensor de ordem superior
# obs: não usaremos tensores de ordem superior nos demais exercícios
class Xor:
def __init__(self):
self.x = np.array([
int(sys.argv[1]),
int(sys.argv[2]),
int(sys.argv[3]),
int(sys.argv[4])
])
# rnas são implementadas como tensores ou como grafos de tensores
# exemplo usando um tensor único:
self.camadas = [
[ # primeira camada
np.array([[1., 1., 1., 1.]]), # pesos
np.array([-0.5,-1.5,-2.5,-3.5]) # biases
],
[ # segunda camada
np.array([1., -1., 1., -1.]), # pesos
np.array([-0.5]) # biases
],
]
# o exemplo usará a função passo, cuja a derivada é 0.
# obs: redes multimacadas usam outras funções de ativação como sigmoide logística e relu
self.passo = np.vectorize(lambda potencial: 1 if potencial >= 0 else 0)
def ativaDataset(self):
#print("nova ativação") # descomente para visão detalhada
saida = self.ativaInstancia(0)
#print(" f(" + str(instancia) + ") = " + str(saida))
def ativaInstancia(self, i):
sinal = self.x
for c in range(len(self.camadas)):
entrada = sinal
pesos = self.camadas[c][0]
biases = self.camadas[c][1]
potencial = np.matmul(pesos, sinal) + biases
sinal = self.passo(potencial)
saida = sinal
print(
"i=" + str(i) +
" c=" + str(c) +
" x=" + str(entrada) +
" w={:24s}".format(str(pesos.tolist())) +
" b={:12s}".format(str(biases)) +
" v=" + str(entrada) +
" y=" + str(saida)
)
#print(" camada: " + str(c))
#print(" entrada: " + str(sinal))
#print(" potencial: " + str(potencial))
#print(" saida: " + str(sinal))
return sinal
#def sigmoide(self, potencial):
# return 1 / (1 + math.exp(-potencial))
Xor().ativaDataset()