Arquivo

Archive for the ‘python’ Category

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.

backpropagation.py

Abraços

Categorias:python, redes neurais

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.

Categorias:python, redes neurais

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")

Categorias:python, redes neurais

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!

Categorias:python

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 (w) 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")
Categorias:python, redes neurais

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!

Categorias:python
DevOps Insights

By Rodrigo dos Santos Silva

WordPress.com News

The latest news on WordPress.com and the WordPress community.