Created
July 31, 2018 03:00
-
-
Save proxyanon/2698fd2ac0e54fdbc619be0f441e2eb3 to your computer and use it in GitHub Desktop.
Neural Network Implementation (Simple)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*-coding: utf8-*- | |
''' Neural Network Implementation ''' | |
# @author Daniel Victor Freire Feitosa | |
# @copyrigths by Daniel Victor Freire Feitosa 2018 | |
# @license GPL 3.0 | |
from numpy import exp, dot, array, random | |
def sigmoid(x): | |
return 1 / (1 + exp(-x)) | |
def sigmoid_derivate(x): | |
return x * (1 - x) | |
class NeuralNetwork: | |
def __init__(self, inputSize, hiddenSize, outputSize): | |
self.inputSize = inputSize # quantidade de entradas | |
self.hiddenSize = hiddenSize # quantidade de neurononios na camada hidden | |
self.outputSize = outputSize # quantidade da camda de saida | |
self.pesos_1 = 2 * random.random((self.inputSize, self.hiddenSize)) - 1 # pesos da camada de entrada para a hidden | |
self.pesos_2 = 2 * random.random((self.hiddenSize, self.outputSize)) - 1 # pesos da camada hidden para a saida | |
def feedfoward(self, entradas): # feedfoward = entradas * pesos [ z(I, W) = Iij * Wij ] | |
self.layer1 = sigmoid(dot(entradas, self.pesos_1)) # camada hidden | |
layer2 = sigmoid(dot(self.layer1, self.pesos_2)) # saida | |
return layer2 | |
def backpropagation(self, entradas, saidas, eta): # backpropagation | |
layer2 = self.feedfoward(entradas) # saida | |
layer2_error = saidas - layer2 # erro da camada de saida para a hidden [ Error(x) = target - x ] | |
layer2_delta = layer2_error * sigmoid_derivate(layer2) # delta da camada de saida para a hidden [ Delta1 = Error * Derivate(x) ] | |
layer1_error = layer2_delta.dot(self.pesos_2.T) # erro da camada hidden para a entrada [ Error(x) = Delta1 * Wij2 ] | |
layer1_delta = layer1_error * sigmoid_derivate(self.layer1) # delta da camda hidden para a entrada [ Delta2 = Error * Derivate(x) ] | |
self.pesos_2 += self.layer1.T.dot(layer2_delta) * eta # pesos da camada de saida para a hidden ajustados | |
self.pesos_1 += entradas.T.dot(layer1_delta) * eta # pesos da camada hidden para a entrada ajustados | |
def train(self, entradas, saidas, entrada, epochs=10000, eta=1.0): | |
for i in xrange(epochs): # treino | |
self.backpropagation(entradas, saidas, eta) # faz o backprop para ajuste dos pesos | |
return self.feedfoward(entrada) # faz o feedfoward da entrada | |
''' Entradas (horas_estudadas, horas_dormidas, irrelevante=0) ''' | |
entradas = array([ | |
[0.2, 0.8, 0.0], | |
[1.0, 0.6, 0.0], | |
[0.4, 0.8, 0.0] | |
]) | |
''' Saidas (notas_provas) ''' | |
saidas = array([ | |
[0.3], | |
[0.9], | |
[0.5] | |
]) | |
''' Entrada (10 horas etudadas, 9 horas dormidas) ''' | |
entrada = array([1.0, 0.9, 0.0]) | |
''' NeuralNetwork 3 entradas, 50 neuronios na camada hidden, 1 saida ''' | |
nn = NeuralNetwork(3, 50, 1) | |
print nn.train(entradas=entradas, saidas=saidas, entrada=entrada, epochs=10000, eta=1.0) | |
# epochs => quantidade de vezes de ajuste de pesos | |
# eta => taxa de aprendizado | |
# 0.0 => 0 | |
# 0.1 => 1 | |
# (assim por diante) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment