Multilayer Perceptron usando Backpropagation em Python
Olá a todos.
Segue link contendo código fonte de uma implementação do algoritmo Back Propagation do Perceptron Multicamadas.
Ele foi feito por mim em Python, com base no algoritmo desenvolvido por Neil Schemenauer <nas@arctrix.com>
O algoritmo está focado na função XOR.
Abraços
Rede Neural Perceptron – Controle de Portas OR em Python
Olá a todos!
Segue código-fonte de um controle de portas OR utilizando redes neurais do tipo Perceptron, escrito em linguagem Python.
O programa recebe 4 conjuntos de dados (0,0 – 0,1 – 1,0 – 1,1) e a rede faz o aprendizado de forma a identificar os pesos adequados para produzir a saída desejada (no caso, 0, 1, 1 e 1 ).
OBS: 0 = falso e 1 = verdadeiro
#!/usr/bin/env python # -*- coding: utf-8 -*- # perceptron2.py # aplicativo para analise de portas OR # by: Antonio Rodrigo dos Santos Silva # falso = 0, verdadeiro = 1 # [0,0] | resposta = 0 # [0,1] | resposta = 1 # [1,0] | resposta = 1 # [1,1] | resposta = 1 # numero maximo de interacoes max_int = 20 # threshold (limiar) threshold = 0 # peso 0 w_0 = -threshold # entrada 0 x_0 = 1 # entradas x = [[x_0,0,0], [x_0,0,1], [x_0,1,0], [x_0,1,1]] # quantos itens tem o vetor x (4) tamanho_x = len(x) # quantos itens estão em cada posicao do vetor x qtde_itens_x = len(x[0]) # pesos (sinapses) w = [w_0,0,0] # quantos itens tem o vetor w (3) tamanho_w = len(w) # respostas desejadas d = [0,1,1,1] # taxa de aprendizado (n) taxa_aprendizado = 0.5 #saida y = 0 # resposta = acerto ou falha resposta = "" # soma u = 0 #erro e = 0 print("Treinando") # inicio do algoritmo for k in range(1,max_int): acertos = 0 e = 0 print("INTERACAO "+str(k)+"-------------------------") for t in range(0,tamanho_x): u = 0 # para calcular a saida do perceptron, cada entrada de x eh multiplicada # pelo seu peso w correspondente for j in range(0,qtde_itens_x): u += x[t][j] * w[j] # funcao de saida if u > 0: y = 1 else: y = 0 # atualiza os pesos caso a saida nao corresponda ao valor esperado if y == d[t]: resposta = "acerto" acertos += 1 e = 0 else: resposta = "erro" # calculando o erro e = d[t] - y # atualizando os pesos for j in range (0,tamanho_w): w[j] = w[j] + (taxa_aprendizado * e * x[t][j]) print(resposta + " >>> u = "+str(u)+ ", y = "+ str(y)+ ", e = "+str(e)) if acertos == tamanho_x: print("\nFuncionalidade aprendida com "+str(k)+" interacoes") print("\nPesos encontrados =============== ") for j in range (0,tamanho_w): print(w[j]) break; print("") print("Finalizado")
Abraços e até o próximo post.
Adaline em Python – Redes Neurais Artificiais
#!/usr/bin/env python # -*- coding: utf-8 -*- # aplicativo para verificar se o ser vivo eh quadrupede ou bipede # quadrupede = 1, bipede = -1 # cao = [-1,-1,1,1] | resposta = 1 # gato = [1,1,1,1] | resposta = 1 # cavalo = [1,1,-1,1] | resposta = 1 # homem = [-1,-1,-1,1] | resposta = -1 # pesos (sinapses) w = [0,0,0,0] # entradas x = [[-1,-1,1,1], [1,1,1,1], [1,1,-1,1], [-1,-1,-1,1]] # respostas esperadas t = [1,1,1,-1] # bias (ajuste fino) b = 0 #saida y = 0 # numero maximo de interacoes max_int = 1000 # taxa de aprendizado taxa_aprendizado = 0.0025 #soma soma = 0 # nome do animal animal = "" # resposta = acerto ou falha resposta = "" # dicionario de dados d = {'-1,-1,1,1' : 'cao', '1,1,1,1' : 'gato', '1,1,-1,1' : 'cavalo', '-1,-1,-1,1' : 'homem' } print("Treinando") # funcao para converter listas em strings def listToString(list): s = str(list).strip('[]') s = s.replace(' ', '') return s # inicio do algoritmo for k in range(1,max_int): acertos = 0 print("INTERACAO "+str(k)+"-------------------------") for i in range(0,len(x)): soma = 0 # pega o nome do animal no dicionário if d.has_key(listToString(x[i])): animal = d[listToString(x[i])] else: animal = "" # para calcular a saida do adaline, cada entrada de x eh multiplicada # pelo seu peso w correspondente for j in range(0,len(x[i])): soma += x[i][j] * w[j] # a saida eh igual a soma anterior y_in = soma #print("y_in = ",str(y_in)) # funcao de ativação if y_in >= 0: y = 1 else: y = -1 # atualiza os pesos for j in range (0,len(w)): # regra delta w[j] = w[j] + taxa_aprendizado * (t[i] - y_in) * x[i][j] if y == t[i]: acertos+=1 resposta = "acerto" else: resposta = "erro" #imprime a resposta if y == 1: print(animal+" = quadrupede = "+resposta) elif y == 0: print(animal+" = padrao nao identificado = "+resposta) elif y == -1: print(animal+" = bipede = "+resposta) if acertos == len(x): print("Funcionalidade aprendida com "+str(k)+" interacoes") break print("") print("Finished")
Converter um número para binário em Python
Basta utilizar o seguinte comando:
numero = 13 print "{0:b}".format(numero)
Até a próxima dica!
Perceptron usando Python – redes neurais artificiais
Iniciei a pouco tempo estudos sobre RNA (Redes Neurais Artificiais). Usando a linguagem Python, consegui com sucesso reproduzir um Perceptron, o tipo mais simples de rede neural artificial, proposto por Rosenblatt baseado no modelo de McCulloch-Pitts.
As características deste Perceptron são:
– classificação de conjuntos linearmente separáveis
– aprendizado supervisionado
– rede de camada única: só existe um nó entre qualquer entrada e qualquer saída da rede
Com a técnica de aprendizado supervisionado foquei o seguinte problema: fazer com que o programa identifique se um determinado animal é bípede ou quadrúpede.
Caso a resposta da rede não seja a esperada como resposta, um ajuste de pesos é realizado de forma que o algoritmo consiga encontrar um conjunto de pesos ideais para que assim a rede classifique corretamente as entradas (Teorema de Convergência do Perceptron de Rosenblatt).
Para isso adotamos os seguintes padrões:
Saídas:
- quadrúpede = 1
- bípede = -1
Vetores de treinamento
- Cão [ 1 -1 1 1 ]
- Gato [ 1 1 1 1 ]
- Cavalo [ 1 1 -1 1 ]
- Homem [ -1 -1 -1 1 ]
E a saída esperada para cada animal é:
- Cão = 1 (quadrúpede)
- Gato = 1 (quadrúpede)
- Cavalo = 1 (quadrúpede)
- Homem = -1 (bípede)
Atribuimos o valor zero a todos os pesos e bias (b) e o valor um para o threshold e taxa de aprendizado.
A equação de saída é dada de acordo com a equação abaixo:
Para o ajuste de pesos, caso a saída tenha um valor diferente do esperado, utilizaremos a seguinte equação:
Segue abaixo o algoritmo
#!/usr/bin/env python # -*- coding: utf-8 -*- # aplicativo para verificar se o ser vivo eh quadrupede ou bipede # quadrupede = 1, bipede = -1 # cao = [-1,-1,1,1] | resposta = 1 # gato = [1,1,1,1] | resposta = 1 # cavalo = [1,1,-1,1] | resposta = 1 # homem = [-1,-1,-1,1] | resposta = -1 # pesos (sinapses) w = [0,0,0,0] # entradas x = [[-1,-1,1,1], [1,1,1,1], [1,1,-1,1], [-1,-1,-1,1]] # respostas esperadas t = [1,1,1,-1] # bias (ajuste fino) b = 0 #saida y = 0 # numero maximo de interacoes max_int = 10 # taxa de aprendizado taxa_aprendizado = 1 #soma soma = 0 #theshold threshold = 1 # nome do animal animal = "" # resposta = acerto ou falha resposta = "" # dicionario de dados d = {'-1,-1,1,1' : 'cao', '1,1,1,1' : 'gato', '1,1,-1,1' : 'cavalo', '-1,-1,-1,1' : 'homem' } print("Treinando") # funcao para converter listas em strings def listToString(list): s = str(list).strip('[]') s = s.replace(' ', '') return s # inicio do algoritmo for k in range(1,max_int): acertos = 0 print("INTERACAO "+str(k)+"-------------------------") for i in range(0,len(x)): soma = 0 # pega o nome do animal no dicionário if d.has_key(listToString(x[i])): animal = d[listToString(x[i])] else: animal = "" # para calcular a saida do perceptron, cada entrada de x eh multiplicada # pelo seu peso w correspondente for j in range(0,len(x[i])): soma += x[i][j] * w[j] # a saida eh igual a adicao do bias com a soma anterior y_in = b + soma #print("y_in = ",str(y_in)) # funcao de saida eh determinada pelo threshold if y_in > threshold: y = 1 elif y_in >= -threshold and y_in <= threshold: y = 0 else: y = -1 # atualiza os pesos caso a saida nao corresponda ao valor esperado if y == t[i]: acertos+=1 resposta = "acerto" else: for j in range (0,len(w)): w[j] = w[j] + (taxa_aprendizado * t[i] * x[i][j]) b = b + taxa_aprendizado * t[i] resposta = "Falha - Peso atualizado" #imprime a resposta if y == 1: print(animal+" = quadrupede = "+resposta) elif y == 0: print(animal+" = padrao nao identificado = "+resposta) elif y == -1: print(animal+" = bipede = "+resposta) if acertos == len(x): print("Funcionalidade aprendida com "+str(k)+" interacoes") break; print("") print("Finalizado")
acentos no python
Você já tentou criar seu primeiro programa “Alô mundo” no Python e se deparou com a seguinte mensagem?
SyntaxError: Non-ASCII character '\xc3' in file teste.py on line 2, but no encoding declared;
Seus problemas acabaram!
Digite no início do arquivo a seguinte string
# -*- coding: utf-8 -*-
Que o python passará a reconhecer todos os acentos digitados.
Até a próxima dica!