Uma Rede convolucional poderosa versão 3.0
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.
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.)
em desenvolvimento
// 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
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.
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.
A interface para Lua fornece algumas constantes, possibilitando configurar algumas camadas.
SIGMOID = 0
Essa constante informa que a camada irá utilizar a função sigmoid como função de ativação da camada.
TANH = 2
Essa constante informa que a camada irá utilizar a função tangente hiperbólica como função de ativação da camada.
RELU = 4
Essa constante informa que a camada irá utilizar a função relu como função de ativação da camada.
LIN = 6
Essa constante informa que a camada irá utilizar a função linear como função de ativação da camada.
ALAN = 8
Essa constante informa que a camada irá utilizar a função alan como função de ativação da camada.
O conjunto de funções fornecidas permitem fazer algumas alterações no objeto da Cnn.
Gera uma tabela com as posições de um ponto tridimensional
SintaxeP3D(x,y,z) P3D(x,z)-- y = xParâ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.
Gera uma tabela com as posições de um ponto bidimensional
SintaxeP2D(x,y) P2D(x) -- y = xParâmetros
O parâmetro x corresponde a dimensão x.
O parâmetro y corresponde a dimensão y.
Gera uma tabela referente ao objeto Params
SintaxeParams(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.
Gera uma tabela referente ao objeto RandomParams
SintaxeRDP(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.
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.
SintaxeEntrada(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.
Adiciona uma camada convolucional na rede
SintaxeConvolucao(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.
Adiciona uma camada convolucional com função de ativação na rede
SintaxeConvolucaoF(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.
Adiciona uma camada convolucional com função de ativação não causal na rede
SintaxeConvolucaoNC(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.
Adiciona uma camada Pooling na rede
SintaxePooling(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.
Adiciona uma camada Relu na rede
SintaxeRelu()-- 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.
Adiciona uma camada PRelu na rede
SintaxePRelu() -- 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.
Adiciona uma camada DropOut na rede
SintaxeDropOut(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.
Adiciona uma camada FullConnect na rede
SintaxeFullConnect(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.
Adiciona uma camada BatchNorm na rede
SintaxeBatchNorm() -- 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.
Adiciona uma camada SoftMax na rede
SintaxeSoftMax() -- 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.
Modifica o parâmetro que permite que a camada atualize os seus pesos.
SintaxeSetLearnable(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
Modifica o parâmetros da camada.
SintaxeSetParams(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.
Remove a última camada.
SintaxeRemoveLastLayer()
Mostra a rede convolucional.
SintaxePrintCnn()
Faz a operação propagation da rede
SintaxeCall(entrada)Parâmetros
O parâmetro entrada Uma tabela contendo os valores que serão aplicados na entrada da rede.
Faz a operação backpropagation da rede
SintaxeLearn(objetivo)Parâmetros
O parâmetro entrada Uma tabela contendo os valores que serão aplicados como tensor objetivo da rede.