Inteligencia Artificial

Deep Learning com Keras – primeiro passo

O título é “Aprendendo Deep Learning com Keras” porque “eu” estou aprendendo. Mas detesto fazer anotações, afinal eu sempre perco em meio a tanta coisa no computador. Por isso, decidi fazer em formato de artigo para  minhas próprias consultas até pegar o jeito. No final das contas, vai servir para outras pessoas que também querem iniciar-se em inteligência artificial.

Já escrevi alguma coisa com Keras, Caffe, TensorFlow e Theano. Se procurar aí na caixa de pesquisa, certamente vai encontrar. Bem, dessa vez estou tentando fazer uma coisa mais robusta. Vou citar detalhes importantes, dúvidas de iniciantes (como eu, que já usei profissionalmente IA e CV, mas não domino) e macetes, conforme eles surgirem.

Machine Learning

Deep Learning é um subcampo do aprendizado de máquina. Pense em Machine Learning como uma macro. O assunto não é complexo apenas nos conceitos, mas desde a configuração de um ambiente até a codificação são igualmente dolorosos. Se você realmente quer aprender de verdade, vai ter que estudar como um Chinês.

deep learningNão sei ao certo até onde irei, mas por enquanto estou de boa vontade.

Deep Learning

O deep learning utiliza um conjunto de algorítimos que imitam o comportamento do cérebro, usualmente chamado de ANN (Artificial Neural Network – ou Rede Neural Artificial).

Keras

Existem algumas bibliotecas para ajudar a compor a rede neural. Nesse artigo, estarei utilizando Keras com TensorFlow como backend.  O Keras é uma API escrita em Python e suporta TensorFlow, CNTK ou Theano como backend. Eu desconheço o CNTK. Keras foi desenvolvido com foco em rápida experimentação.

Com Keras a prototipagem é rápida, além de contar com suporte a redes convolucionais e recorrentes, ou a combinação de ambos. Outra coisa importante é que roda na CPU ou na GPU, portanto qualquer um poderá experimentar, bastando um computador para isso.

A estrutura  de dados do Keras é um model, um caminho de organizar as camadas. O tipo mais simples de model do Keras é o Sequential, uma pilha de camadas lineares (todos os conceitos relacionados serão descritos). Para arquiteturas complexas, o Keras oferece outros recursos.

Perceptron

O modelo de rede neural mais simples que existe é chamado “perceptron”, formado por um único neurônio. Trata-se de uma árvore que possui os nós de entrada e uma única saída. A saída é conectada a cada um dos nós de entrada (a parte da somatória).

perceptron - deep learning

À esquerda são as entradas. Cada nó de entrada é associado a um valor numérico, que pode ser qualquer número real, podendo ser positivo ou negativo, inteiro ou decimal.

Cada nó de entrada tem um peso associado a ele, que também pode ser qualquer número real.

Após isso, todos os valores de entrada e seus pesos são inseridos na somatória.

y = f(\displaystyle \sum_{ i=1}^{D} w_i * x_i)

O resultado será a entrada para uma função de ativação (activation), que é a função de x ($latex f(x)$). Nesse caso, x é o peso da somatório dos nós de entrada e suas conexões.

Para finalizar, o perceptron pode ter um parâmetro adicional chamado bias, que podemos considerar como o peso associado a um nó de entrada adicional que é permanentemente configurado para 1. Até então, esse parágrafo é só informativo.

Perceptrons multicamada

É muito, muito comum encontrar modelos de redes neurais com a camada de entrada, uma ou duas intermediárias e a saída. Essas camadas intermediárias são chamadas de ocultas. Obviamente que com mais recursos, maior a complexidade.

Preparando o computador para utilizar Keras

Se você ainda não o fez, primeiro determinemos que ambiente será o seu. Pouco haverá de se fazer se for utilizar CPU, mas o desempenho é sofrível. Eu estou utilizando uma GPU modesta no meu notebook (GTX1050), mas com toda a certeza é melhor que usar CPU.

Cuda

No artigo anterior, mostrei como configurar o CUDA, que é fundamental se estiver pensando em utilizar sua NVidia. Para pegar a cudnn, será necessário fazer um perfil no site da NVidia. Eu estou utilizando (para minhas experiências) um Debian em um container Docker. Já siga para esse artigo e veja como baixar a imagem e criar o container.

Será necessário adicionar o repositório para o CUDA Toolkit em seu sistema. Baixe o pacote no site da NVidia também. Eu peguei para Ubuntu 16.04, CUDA-10.

Depois de instalar o repositório, siga com o procedimento para a instalação do CUDA no sistema. Lá no site da NVidia terá o processo, mas para descrevê-lo, inclusa a instalação do driver:

 

Lembre-se que primeiro o sistema nativo deve estar configurado, com driver de vídeo funcionando bonitinho. Com o comando nvidia-smi é possível ver o status da placa de vídeo e os processos que a estão utilizando, além da versão do driver e do CUDA. Estou utilizando a versão 410.79 do driver, com CUDA 10.0. Essa é a saída do comando:

nvidia-smi - deep learning

Se você conseguiu chegar até aqui, ótimo, continue a leitura em seguida.

Virtualenv

Após ter configurado o sistema e o container, o próximo passo é criar o virtualenv para trabalhar. Várias dependências serão percebidas conforme forem sendo requeridas, mas as mais problemáticas estou descrevendo aqui como referência.

Primeiro, instale o pacote python-pip, caso ainda não o tenha feito. Já aproveite para atualizá-lo (tudo dentro do container).

Já está instalado, agora é hora de criar um virtualenv. O virtualenv tem uma leve lembrança do chroot. Ele cria uma estrutura com todas as dependências básicas para utilizar Python. Depois, tudo que for relacionado ao seu projeto deve ser instalado dentro do virtualenv. Primeiro, crie um:

Depois, para migrar para dentro do virtualenv, utilize:

Aparecerá o nome do virtualenv criado no canto esquerdo da tela, o que lhe garantirá não estar trabalhando fora dele. Eu gosto de usar o bpython para prototipar código em Python, recomendo a instalação. Após estar dentro do virtualenv, instale-o com o gerenciador de pacotes Python que você instalou, como indicado mais acima:

Bazel

É uma dependência do TensorFlow. Para instalar o Bazel, é necessário ter o bash-completion. Depois, não lembro de onde baixei o pacote Bazel, mas é só caçar no google. Os dois passos (fora o download do pacote):

TensorFlow

Como utilizaremos o TensorFlow como backend do Keras, será necessário instalá-lo. Compilar não é nada simples, enquanto eu estava no processo inicial pré-compilação, mais uma vez o Leonardo Lontra me deu um help voluntário passando essa dica preciosa. Esse pacote é para GPU:

Dependências

Para não se deparar com muitos problemas, algumas dependências podem previamente ser eliminadas:

O café é por minha conta.

De dentro do virtualenv, agora abra o bpython e inclua o keras. Se algo der errado, resolva (haverá certamente uma série longa de dor e sofrimento até chegar nesse ponto). Se nada der errado, deve aparecer algo como:

TensorFlow no bpython - deep learning

Até aqui você já deve ter passado algumas horas com o artigo aberto no seu browser, se está pondo a mão na massa. Descanse, como eu também o farei. No próximo artigo pretendo fazer uma classificação para deixar como exemplo.

Aproveite para curtir a página DobitAoByte no facebook, alí na coluna da direita, próximo ao topo. Até a próxima!

4 comments
  1. Como criar um dataset para deep learning? • Do bit Ao Byte

    […] Latest news Como criar um dataset para deep learning? Como fazer predição com MNIST usando arquivos externos Reconhecimento facial com Raspberry Reconhecimento facial com dlib Como fazer predição de imagens com Keras e OpenCV Classificação de imagens usando Keras Como salvar um model treinado com Keras Convolutional Neural Network com Keras Deep Learning com Keras – Primeira rede neural Deep Learning com Keras – primeiro passo […]

Comments are closed.

%d blogueiros gostam disto: