Em Deep Learning trabalhamos com redes neuronais. Pessoalmente, só sei programar com alguma razoabilidade em Python. Portanto, impunha-se a criação duma rede neuronal programada em Python.
Esta rede tem 3 camadas:
* Camada 1 com 3 neurónios (Input)
* Camada 2 com 4 neurónios (hidden layer)
* Camada 3 com 1 neurónio (output)
Vamos colocar 4 diferentes inputs e aproximar 60 000 vezes com uma geração
import numpy as np
#rede neuronal 3 x 5 x 2
def sigmoide(x, derivada):
if(derivada):
return x*(1-x)
return 1/(1+np.exp(-x))
#input data
#X=np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])
X=np.array([[1669631,2105841,2821997],[2105841,2821997,2288713],[2821997,2288713,2250142],[2288713,2250142,3053129]])
#X=(X-1634380)/1634380
#output
Y=np.array([[2288713],[2250142],[3053129],[208252]])
#Y=(Y-1634380)/1634380
np.random.seed(1)
# matrizes de synapse
syn0= 2* np.random.random((3,4))-1
syn1= 2* np.random.random((4,1))-1
#traning code
for j in range(60000):
camada0=X
camada1=sigmoide(np.dot(camada0,syn0),False)
camada2=sigmoide(np.dot(camada1,syn1),False)
camada2_erro=Y-camada2
if(j%10000)==0:
print("error:"+str(np.mean(np.abs(camada2_erro))))
#backpropagation
l2_delta=camada2_erro * sigmoide(camada2,True)
l1_error=l2_delta.dot(syn1.T)
l1_delta=l1_error* sigmoide(camada1,True)
#atualizar pesos gradient descent
syn1+=camada1.T.dot(l2_delta)
syn0+=camada0.T.dot(l1_delta)
print("Valor previsto")
camada1=sigmoide(np.dot(camada0,syn0),False)
camada2=sigmoide(np.dot(camada1,syn1),False)
print((camada2.T.dot(syn1)*1634380)+1634380)
Comments