Last active
August 14, 2018 00:54
-
-
Save arthurcvm/49a708f4b70b6884d1cb812ffe808b2f to your computer and use it in GitHub Desktop.
Perceptron de 1 neurônio
This file contains 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
import xlrd | |
import random | |
import numpy as np | |
#https://ark4n.wordpress.com/2009/08/26/lendo-arquivos-xls-com-python/ | |
pesos = np.array([0.0, 0.0, 0.0, 0.0]) | |
taxaAprendizagem = 0.01 | |
epoca = 0 | |
entradas = 0 | |
saidas = 0 | |
testes = 0 | |
for i in range(0, 4): #Ok | |
pesos[i] = random.uniform(0, 1) #Define os pesos como números aleatórios entre 0 e 1 | |
print(pesos[i]) | |
def sinal(soma): | |
if(soma >= 0): #PERGUNTAR | |
return 1 | |
return -1 | |
def calculaSaida(registro): | |
soma = 0 | |
for i in range(len(registro)): | |
soma += registro[i]*pesos[i] | |
soma += -1*pesos[3] | |
return sinal(soma) | |
def treinamento(): | |
global entradas | |
global saidas | |
global pesos | |
global epoca | |
global taxaAprendizagem | |
erro = 1 | |
while(erro != 0): | |
erro = 0 | |
for i in range(len(saidas)): | |
saidaCalculada = calculaSaida(np.asarray(entradas[i])) | |
if(saidaCalculada != saidas[i]): | |
for j in range(len(pesos)): | |
if(j == 3): | |
pesos[j] = pesos[j] + (taxaAprendizagem * (saidas[i] - saidaCalculada) * -1) | |
else: | |
pesos[j] = pesos[j]+(taxaAprendizagem*(saidas[i] - saidaCalculada)*entradas[i][j]) | |
print('Peso ' + str(j) + ' atualizado: ' + str(pesos[j])) | |
erro = 1 | |
else: | |
erro = 0 | |
epoca = epoca+1 #PERGUNTAR | |
print(str(epoca)) | |
def xlread(arq_xls): | |
""" | |
Gerador que le arquivo .xls | |
""" | |
# Abre o arquivo | |
xls = xlrd.open_workbook(arq_xls) | |
# Pega a primeira planilha do arquivo | |
plan = xls.sheets()[0] | |
# Para i de zero ao numero de linhas da planilha | |
for i in range(plan.nrows): | |
# Le os valores nas linhas da planilha | |
yield plan.row_values(i) | |
def organizaDados(): | |
global entradas | |
global saidas | |
for linha in xlread('treino_atualizado.xlsx'): | |
# print(linha) | |
if(type(linha[0]) is float): | |
if(type(entradas) is int): | |
entradas = np.array([linha[1], linha[2], linha[3]]) | |
saidas = np.array([linha[4]]) | |
else: | |
entrada = np.array([linha[1], linha[2], linha[3]]) | |
entradas = np.vstack((entradas, entrada)) | |
saidas = np.append(saidas, linha[4]) | |
def organizaTeste(): | |
global testes | |
for linha in xlread('dados_teste.xlsx'): | |
# print(linha) | |
if(type(linha[0]) is float): | |
if(type(testes) is int): | |
testes = np.array([linha[1], linha[2], linha[3]]) | |
else: | |
teste = np.array([linha[1], linha[2], linha[3]]) | |
testes = np.vstack((testes, teste)) | |
organizaDados() | |
organizaTeste() | |
print(entradas) | |
print(saidas) | |
print(testes) | |
treinamento() | |
print("Rede neural treinada") | |
for i in range(len(testes)): | |
print(calculaSaida(np.asarray(testes[i]))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment