Gabriela IA

Uma Rede convolucional poderosa versão 3.0


Introduction


A Gabriela tem se mostrado cada vez mais bonita, uma inteligência artificial baseada em rede neural convolucional. Escrita 100% em linguagem C versão 11 e com uso da api OpenCL para programação paralela, foi obtido um software bem eficiente. Ela é linda eu sei!
You are entitled to get free lifetime updates to this product + exceptional support from the author directly.

A Gabriela ainda não está funcionado por completo, a cada novo tipo de camada adicionada é feito diversos testes para garantir que a implementação esteja correta.

Este artigo visa mostrar o desenvolvimento da Gabriela e documentar o códigos desenvolvidos.

Parte visual da Gabriela

Por hora ela já saiu da telinha preta do cmd. Utilizando a API do Windows foi criado uma janela gráfica mais apresentável. O uso de uma API poderosa para desenhar a interface não convem ao projeto, na tentativa de usar o QT o desempenho foi drasticamente afetado (usando o cmd em um teste a Gabriela treinava 1800 exemplos por segundo, ao utilizar uma janela grafica feita pelo QT caiu para 1300 exemplos por segundo.)

Primeiros passos

em desenvolvimento

Download

Instalação

Criando o primeiro Treino

                            // my first program in C++
            import numpy as np
            print(np.version)
                         

Our you can use the grid system with 3 columns like this;

local a = 10;
require('math')
function c(x)
    print('lua')
    print(math.sin(x).__index .. 'ola' .. 'texto')
end
                         

Lua

Esse projeto utiliza a linguagem lua integrada no código. Trata-se de uma linguagem script poderosa, pequena e de fácil implentação.

A VM Lua contida no objeto Cnn, ainda não possui acesso direto aos atributos de cada objeto, Mas fornece algumas funções que modificam a arquitetura da rede neural convolucional. Todas essas funções possuem sintaxe semelhante as fornecidas na api em C.


Para mais informações sobre a linguagem lua visite lua.org .

Ciclo da vida do Objeto Cnn em lua

Quando o programa é iniciado e carrega um script lua, o objeto Cnn é instanciado e passado sua referência para VM Lua. Lua não tem acesso direto ao Objeto Cnn, em vez disso e fornecido algumas funções para modifica-lo. Quando o programa é finalizado, todos valores intânciados são devidamente finalizados.

Constantes

A interface para Lua fornece algumas constantes, possibilitando configurar algumas camadas.

SIGMOID = 0

SIGMOID

Essa constante informa que a camada irá utilizar a função sigmoid como função de ativação da camada.

TANH = 2

TANH

Essa constante informa que a camada irá utilizar a função tangente hiperbólica como função de ativação da camada.

RELU = 4

RELU

Essa constante informa que a camada irá utilizar a função relu como função de ativação da camada.

LIN = 6

LIN

Essa constante informa que a camada irá utilizar a função linear como função de ativação da camada.

ALAN = 8

ALAN

Essa constante informa que a camada irá utilizar a função alan como função de ativação da camada.

Funções

O conjunto de funções fornecidas permitem fazer algumas alterações no objeto da Cnn.

Funções auxiliares

P3D
Descrição

Gera uma tabela com as posições de um ponto tridimensional

Sintaxe
P3D(x,y,z)
P3D(x,z)-- y = x
Parâmetros

O parâmetro x corresponde a dimensão x.

O parâmetro y corresponde a dimensão y.

O parâmetro z corresponde a dimensão z.

P2D
Descrição

Gera uma tabela com as posições de um ponto bidimensional

Sintaxe
P2D(x,y)
P2D(x) -- y = x
Parâmetros

O parâmetro x corresponde a dimensão x.

O parâmetro y corresponde a dimensão y.

Params
Descrição

Gera uma tabela referente ao objeto Params

Sintaxe
Params(hit_learn) -- momentum = 0, weight_decay = 0, disble_learn = false
Params(hit_learn, momentum, weight_decay, disable_learn)
Parâmetros

O parâmetro hit_learn corresponde a taxa de aprendizado.

O parâmetro momentum corresponde ao momento utilizado.

O parâmetro weight_decay refere-se ao decaimento do peso.

O parâmetro disable_learn desativa a correção de pesos.

RDP
Descrição

Gera uma tabela referente ao objeto RandomParams

Sintaxe
RDP(0) -- usar valores padrões.
RDP(type,a,b)
Parâmetros

O parâmetro type corresponde ao tipo de variável aleatória a ser utilizada.

O parâmetro a constante que multiplica a variável aleatória.

O parâmetro b constante que soma à variável aleatória.

Configuração da entrada da rede

Entrada
Descrição

Modifica o tamanho da entrada da rede. Só pode ser chamada quando a rede estiver vazia(nenhuma camada adicionada), caso contrário um erro será emitido.

Sintaxe
Entrada(x,y,z)
Parâmetros

O parâmetro x corresponde a dimensão x da entrada.

O parâmetro y corresponde a dimensão y da entrada.

O parâmetro z corresponde a dimensão z da entrada.

Adicionar camadas
Convolucao
Descrição

Adiciona uma camada convolucional na rede

Sintaxe
Convolucao(step,filter)
Convolucao(step,filter,Params)
Convolucao(step,filter,Params,RDP)
Parâmetros

O parâmetro step Um ponto 2d para o passo da rede convolucional

O parâmetro filter Um ponto 3d para posição x e y tamanho do filtro e z o número de filtros.

O parâmetro Params Objeto do tipo Params para a camada.

O parâmetro RDP Objeto do tipo RandomParams para os filtros.

ConvolucaoF
Descrição

Adiciona uma camada convolucional com função de ativação na rede

Sintaxe
ConvolucaoF(step,filter,ativacao)
ConvolucaoF(step,filter,ativacao,Params)
ConvolucaoF(step,filter,ativacao,Params,RDP)
Parâmetros

O parâmetro step Um ponto 2d para o passo da rede convolucional

O parâmetro filter Um ponto 3d para posição x e y tamanho do filtro e z o número de filtros.

O parâmetro ativacao Identificador da função de ativação a ser utilizada.

O parâmetro Params Objeto do tipo Params para a camada.

O parâmetro RDP Objeto do tipo RandomParams para os filtros.

ConvolucaoNC
Descrição

Adiciona uma camada convolucional com função de ativação não causal na rede

Sintaxe
ConvolucaoNC(step,abertura,filter,fativacao)
ConvolucaoNC(step,abertura,filter,fativacao,params)
ConvolucaoNC(step,abertura,filter,fativacao,params,RDP)
Parâmetros

O parâmetro step Um ponto 2d para o passo da rede convolucional

O parâmetro abertura Um ponto 2d para a abertura dos filtros.

O parâmetro filter Um ponto 3d para posição x e y tamanho do filtro e z o número de filtros.

O parâmetro fativacao Identificador da função de ativação a ser utilizada.

O parâmetro Params Objeto do tipo Params para a camada.

O parâmetro RDP Objeto do tipo RandomParams para os filtros.

Pooling
Descrição

Adiciona uma camada Pooling na rede

Sintaxe
Pooling(step,filter,type)
Parâmetros

O parâmetro step Um ponto 2d para o passo da rede convolucional

O parâmetro abertura Um ponto 2d para a abertura dos filtros.

O parâmetro type Tipo de camada Pooling a ser adicionada.

Relu
Descrição

Adiciona uma camada Relu na rede

Sintaxe
Relu()-- equivale a Relu(0,1)
Relu(lessoh,greateroh)
Parâmetros

O parâmetro lessoh Constante que multiplica quando a entrada é menor que 0.

O parâmetro greateroh Constante que multiplica quando a entrada é maior que 0.

PRelu
Descrição

Adiciona uma camada PRelu na rede

Sintaxe
PRelu() -- equivale PRelu(Params(1e-3),RDP(0))
PRelu(Params)-- equivale PRelu(Params,RDP(0))
PRelu(Params,RDP)
Parâmetros

O parâmetro Params Objeto do tipo Params para a camada.

O parâmetro RDP Objeto do tipo RandomParams para o filtro.

DropOut
Descrição

Adiciona uma camada DropOut na rede

Sintaxe
DropOut(prob_saida)
DropOut(prob_saida,seed)
Parâmetros

O parâmetro prob_saida Probabilidade da entrada ir para a saída.

O parâmetro seed Semente para número pseudo aleatório.

FullConnect
Descrição

Adiciona uma camada FullConnect na rede

Sintaxe
FullConnect(out_size)
FullConnect(out_size,func)
FullConnect(out_size,func,params)
FullConnect(out_size,func,params,RDPW,RDPB)
Parâmetros

O parâmetro out_size Número de neuronios para a saída.

O parâmetro func Identificador para a função de ativação.

O parâmetro params Objeto do tipo Params para a camada.

O parâmetro RDPW Objeto do tipo RandomParams para os pesos.

O parâmetro RDPB Objeto do tipo RandomParams para o bias.

BatchNorm
Descrição

Adiciona uma camada BatchNorm na rede

Sintaxe
BatchNorm() -- equivale a BatchNorm(1e-3,Params(1e-3),RDP(0),RDP(0)
BatchNorm(epsilon) -- equivale a BatchNorm(epsilon, Params(1e-3), RDP(0), RDP(0)
BatchNorm(epsilon,Params) -- equivale a BatchNorm(episilon, params, RDP(0), RDP(0)
BatchNorm(epsilon,Params,RDPY,RDPB)
Parâmetros

O parâmetro epsilon Constante de segurança para não ocorrer divisão por 0.

O parâmetro params Objeto do tipo Params para a camada.

O parâmetro RDPY Objeto do tipo RandomParams para os pesos Gama.

O parâmetro RDPB Objeto do tipo RandomParams para os pesos Beta.

SoftMax
Descrição

Adiciona uma camada SoftMax na rede

Sintaxe
SoftMax() -- equivale a SoftMax(true, false)
SoftMax(islastLayer) -- equivale a SoftMax(islastLayer, false)
SoftMax(islastLayer,normalize)
Parâmetros

O parâmetro islastLayer Informa se é a ultima camada.

O parâmetro normalize Informa se é para normalizar a entrada.

Funções extras

Essas funções podem auxiliar na visualização da rede neural ou na manipulação da mesma
SetLearnable
Descrição

Modifica o parâmetro que permite que a camada atualize os seus pesos.

Sintaxe
SetLearnable(camada_i,learn)
Parâmetros

O parâmetro camada_i Indice da camada(os indices em lua iniciam-se em 1).

O parâmetro learn true para corrigir os pesos, false para não corrigir os pesos

SetParams
Descrição

Modifica o parâmetros da camada.

Sintaxe
SetParams(hit_learn, momentum, weight_decay) -- aplica a ultima cada adicionada.
SetParams(camada_i, hit_learn, momentum, weight_decay)
                    
Parâmetros

O parâmetro camada_i Indice da camada(os indices em lua iniciam-se em 1).

O parâmetro hit_learn corresponde a taxa de aprendizado.

O parâmetro momentum corresponde ao momento utilizado.

O parâmetro weight_decay refere-se ao decaimento do peso.

RemoveLastLayer
Descrição

Remove a última camada.

Sintaxe
RemoveLastLayer()
PrintCnn
Descrição

Mostra a rede convolucional.

Sintaxe
PrintCnn()
Call
Descrição

Faz a operação propagation da rede

Sintaxe
Call(entrada)
Parâmetros

O parâmetro entrada Uma tabela contendo os valores que serão aplicados na entrada da rede.

Learn
Descrição

Faz a operação backpropagation da rede

Sintaxe
Learn(objetivo)
Parâmetros

O parâmetro entrada Uma tabela contendo os valores que serão aplicados como tensor objetivo da rede.