Desenvolvendo a sua primeira rede neural com Keras – parte 1

Há alguns anos o grupo de alunos que eu orientava em iniciação científica publicou um artigo no qual propusemos o uso de visão computacional para a identificação de cédulas de real. A ideia era que o aplicativo, para Android, pudesse ser usado por deficientes visuais. Na apresentação do trabalho, em um congresso no Rio, diversos colegas questionaram o quanto seria interessante se, além de identificar o valor das notas, o aplicativo pudesse avaliar se uma nota era real ou falsa. Anos mais tarde, com tempo, pude revisitar este trabalho e desenvolvi uma rede neural que vai ao encontro das possíveis respostas para os questionamentos daquela apresentação.  Compartilho nesta postagem, em formato de tutorial, a primeira parte para a resolução desta problemática. A intenção é a de que você também possa fazer a sua rede neural. Para isso, conhecimento em python será essencial.

A primeira etapa: acessando os dados 

A biblioteca Keras é bastante poderosa e pode lidar com diferentes tipos de dados. Para este tutorial, nossa rede neural será treinada a partir de um arquivo de texto (CSV ou TXT). Há alguns repositórios na internet que fazem a curadoria de arquivos para o treinamento de redes neurais (um bom exemplo é o Kaggle). Neste momento, utilizaremos o arquivo disponível no link abaixo (faça o download do arquivo).

O arquivo que trabalharemos contém um conjunto de registros de características provenientes de notas (de dólar neste caso) falsas e verdadeiras. Cada linha contém cinco dados: quatro características das notas e uma avaliação. As características já estão descritas numericamente (necessário para que alimentemos as redes neurais) e representam aspectos encontrados nas notas analisadas. O último valor de cada linha é um número binário, representando as notas falsas (0) e verdadeiras (1).

Para este tutorial abordaremos as 3 primeiras etapas do tratamento dos dados, que serão essenciais para que, posteriormente, a rede neural possa ser treinada e, por fim, testemos a sua eficiência.

1 – carregando os dados

Para esta tarefa utilizaremos a biblioteca Numpy. A Keras consegue entender os dados quando eles estão descritos nos vetores numpy e existem funções muito práticas que facilitam esta tarefa. Começamos importando a função loadtxt da biblioteca numpy. 

from numpy import loadtxt

E então, declaramos o carregamento de fato dos dados para uma variável numpy.

dados = loadtxt('caminho/do/arquivo/notas.txt', delimiter=',')

Agora que os dados estão disponíveis em uma variável, podemos separá-los em dois grupos: os valores descritivos (X) e os resultados de avaliação, ou labels (y). Mantendo as coisas simples, utilizaremos o vector slicing.

#dividir o conjunto de dados em valores (X) e seus labels equivalentes (y)
X = dados[:,0:4] #[todas as linhas, elementos com indice de 0 a 3]
y = dados[:,4] #[todas as linhas, elementos com indice 4]

2 – definição dos grupos de teste e treinamento

Ambos os grupos serão subdivididos em: treinamento e teste. Há algumas maneiras para se realizar esta subdivisão, a mais simples talvez seja através da biblioteca sklearn, que traz a função train_test_split. Esta função já randomiza os dados e resulta em grupos para o treinamento e para o teste das redes neurais, permitindo a customização do tamanho destes grupos. Para utilizá-la, faremos antes a importação da biblioteca.

from sklearn.model_selection import train_test_split

E então podemos definir as variáveis que conterão os resultados da função. O parâmetro test_size define o tamanho do conjunto de teste (no exemplo, 30% dos dados serão utilizados para teste e os outros 70% para o treinamento da rede).

#dividir os grupos em treinamento e teste
#a função train_test_split randomiza o conjunto de dados e depois os divide
#conforme a proporção definida
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)

3 – normalização dos valores

Por fim, terminando as etapas de adequação dos dados, realizamos uma boa prática: a normalização da escala dos dados. Para isso, nos valemos novamente da biblioteca sklearn, que apresenta a função MinMaxScaler. Para empregá-la, faremos antes a importação deste módulo da biblioteca.

from sklearn.preprocessing import MinMaxScaler

A função resulta em valores normalizados, ou seja, variam entre 0 e 1. Deste modo, o treinamento da rede tenderá a ser mais preciso. No exemplo, criamos um objeto que aprenderá a normalizar os dados tendo contato apenas com os valores da classe de treinamento (evitando, assim, que os valores de teste sejam, de algum modo, conhecidos anteriormente pela rede neural). Depois de treinados, tanto os dados de treinamento quanto os de teste serão transformados (normalizados). 

E deste modo, terminamos esta primeira etapa em rumo ao desenvolvimento da nossa rede neural. Na verdade, como perceberam, nem usamos a Keras ainda (risos) mas acreditem, usaremos. Na próxima etapa vamos arquitetar a estrutura da nossa rede e a alimentaremos com os dados de treinamento.

Até aqui o seu código deve ser parecido com o resumo abaixo. Qualquer dúvida, deixe a sua mensagem e vamos construindo conhecimento juntos.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *