O que é Keras? Para que serve?

Framework Keras

Keras é uma biblioteca de código aberto criada para Deep Learning com Python. Ele é utilizado na criação de redes neurais para resolução de várias tarefas diferentes, como classificação de imagens, detecção de objetos e regressão.

Para sua utilização é necessária a criação de códigos similares aos aplicados na linguagem Python, e por ser de código aberto qualquer pessoa pode utilizar gratuitamente.

Como se utiliza o Keras na prática?

O Keras foi desenvolvido com base no TensorFlow e é muito fácil de ser utilizado, principalmente quando comparamos com outros frameworks (uma união de códigos com uma finalidade), como o próprio TensorFlow, Theano, Caffe entre outros.

Para começar a utilizar o Keras precisamos realizar sua instalação. Uma boa opção para esse processo é a utilização do Anaconda Navigator, que solicitará também a instalação do TensorFlow, visto que o Keras utiliza o TensorFlow por debaixo dos panos.

Uma vez que a instalação esteja finalizada, basta utilizarmos uma interface para criação dos códigos e execuções. Normalmente utilizamos as mesmas interfaces da linguagem Python, como o Jupyter Notebook, Pycharm, etc.

Quem utiliza o Keras?

O Keras é largamente utilizado por pesquisadores e profissionais de Inteligêncial Artificial que desejam criar e experimentar modelos e precisam de uma interface de usuário fácil e rápida, sem a utilização de códigos demasiadamente complexos.

Muitas empresas utilizam o Keras em suas aplicações. Algumas delas são: Uber, Airbnb, Coca-cola, PepsiCo, Hershey, e muitas outras.

Arranha-céus - Mundo corporativo

A biblioteca é multi-plataforma, o que permite sua execução no Windows, MacOS ou Linux. É comum a utilização de Deep Learning com CPUs e também com GPUs (placas de vídeo, que aceleram o processamento), e o Keras possibilita essas duas abordagens.

Para que serve o Keras?

O Keras facilita a construção e o treinamento de redes neurais e também fornece uma ampla variedade de redes neurais pré-treinadas que podem ser usadas para várias tarefas.

Ele foi desenvolvido com foco em permitir a experimentação rápida. No entanto, existem algumas limitações. Por exemplo, não é tão eficiente quanto o TensorFlow em termos de uso de memória e velocidade computacional.

Além disso, o Keras não oferece suporte ao treinamento distribuído, que é necessário para treinar redes neurais muito grandes.

Geralmente o Keras é indicado para quem está começando a aprender redes neurais, afinal é muito simples programar com Keras.

Como utilizar Keras na prática

Poderíamos continuar nossas explicações sobre o Keras de muitas formas, mas para quem está conhecendo ele agora certamente essa não será a melhor abordagem.

Então, vamos conferir uma utilização simples e prática para que seu entendimento seja completo.

Nesse exemplo, nosso objetivo será criar uma rede neural capaz de classificar algumas flores com base nos tamanhos de suas sépalas e pétalas.

Vamos começar com um código em Python, que utilizará o Sklearn e o Pandas para importar a base de dados para nossa sessão:

from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
x = pd.DataFrame(iris.data, columns=[iris.feature_names])
y = pd.Series(iris.target)

Após essa execução, no objeto x teremos as variáveis preditoras, que são duas medidas das sépalas e duas medidas das pétalas, e no objeto y a variável target que contêm a classificação de cada flor em três categorias possíveis, sendo 0, 1 ou 2.

Para o treinamento de uma rede neural é necessário que a variável target tenha um neurônio para cada categoria. Ou seja, precisaremos de três neurônios, que serão os neurônios de saída da rede.

Para alimentar cada neurônio de maneira independente iremos transformar a variável target, nosso objeto y, em uma matriz com três colunas, sendo que cada coluna terá apenas valores 0 ou 1.

Assim ao observamos cada linha dessa matriz, ela sempre terá dois valores 0 e um valor 1, sendo que a coluna onde o valor 1 estiver indica a categoria da linha em questão. Na prática estamos utilizando a técnica de One Hot Enconding.

import keras
from keras.utils import np_utils
y_convertido = np_utils.to_categorical(y)

Convertendo uma variável em uma matriz com três colunas

Com essas poucas linhas de código acima já iniciamos a utilização do Keras através da função to_categorical do pacote np_utils, que converte a variável target na matriz (y_convertido) que precisamos.

Na sequência iremos separar os dados em treino e teste, novamente utilizando Python, mas agora utilizando o objeto x e também o objeto y_convertido, que foi criado através do Keras. Indicando test_size = 0.3 estamos definindo uma base de teste com 30% dos dados, e a base de treino com 70%.

from sklearn.model_selection import train_test_split
x_treino, x_teste, y_treino, y_teste = train_test_split(x, y_convertido, test_size = 0.3)

Nesse momento podemos iniciar o treinamento de nossa rede neural. Para isso iremos utilizar alguns pacotes do Keras que serão responsáveis por esse processo.

Agora começaremos a abordar alguns conceitos mais técnicos sobre redes neurais. Caso você fique com dúvidas, confira nossos artigos sobre redes neurais, começando aqui:

Lembrando que todos esses conceitos teóricos e as aplicações práticas são apresentados em detalhes em nosso curso Redes Neurais, Deep Learning e Visão Computacional, de forma clara e objetiva, sempre com foco na didática.

Utilizaremos os pacotes Dense e Sequential para criação de uma rede neural densa, totalmente conectada. O pacote Activation para função de ativação e o SGD para definição do algoritmo.

from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD

Com os pacotes importados, podemos iniciar o treinamento utilizando algumas funções do Keras.

Para construir a rede neural iremos adicionar camadas por meio do comando “.add”. O primeiro argumento da função Dense consiste no número de neurônios que aquela camada terá, no caso 10. Também podemos informar o modelo de inicialização (kernel_initializer) das variáveis e a função de ativação (activation) nessa camada.

O parâmetro input_dim é a quantidade de neurônios de entrada, que nesse caso são as 4 variáveis preditoras.

modelo = Sequential()
modelo.add(Dense(10, input_dim=4, kernel_initializer='normal', activation='relu'))

Agora adicionamos mais uma camada, que é a saída com 3 neurônios pois temos 3 classes, conforme já conferimos. A função softmax para a saída costuma ser usada em problemas de classificação. Ela dá como resultado as probabilidades de cada uma das classes.

modelo.add(Dense(3, kernel_initializer='normal', activation='softmax'))

Definimos então a utilização do algoritmo SGDGradiente Descendente Estocástico (optimizer), a função de custo (loss) e a métrica (metrics) para avaliação do resultado.

otimizador = SGD()
modelo.compile(loss='categorical_crossentropy', optimizer=otimizador, metrics=['acc'])

Após essas definições podemos iniciar o treinamento efetivo do modelo com a função fit. Indicamos então os dados de treino, a quantidade de iterações (epochs) e o tamanho do lote (batch_size), que definirá quantas amostras serão utilizadas a cada iteração.

modelo.fit(x_treino, y_treino, epochs=1000, batch_size=105)

Com esta base e configurações que definimos, na iteração 695 a rede chega em uma acurácia de 97,14%, não melhorando mais essa precisão com mais iterações.

Resutado de treinamento de uma rede neural com Keras

Com este modelo devidamente treinado, podemos realizar as previsões utilizando a função predict e passando os dados de teste. No código abaixo iremos utilizar também o Numpy para exibir as previsões com apenas duas casas decimais, simplificando a visualização.

predicoes = modelo.predict(x_teste)
import numpy as np
np.set_printoptions(formatter={'float': lambda x: "{0:0.2f}".format(x)})
print(predicoes)

Previsões de uma rede neural para 3 classes

Ao lado podemos visualizar as primeiras previsões geradas, sendo que a classe com maior probilidade será a classe escolhida para previsão. Na primeira linha temos 97% de probalidade para a classe 0, 3% para classe 1 e 0% para classe 2.

Ou seja, a primeira amostra receberá como previsão a categoria 0. Na segunda linha a previsão é a categoria 2, pois está tem 66% de probabilidade. Já na última linha teremos como previsão a categoria 1, pois está tem 60% de probabilidade.

Como podemos verificar, a utilização prática do Keras é realmente simples. Possuindo o conhecimento sobre redes neurais necessário você não terá dificuldades na execução.

Como utilizar Keras e TensorFlow com Inteligência Artificial na prática

Conforme já mencionamos, preparamos um curso muito completo de redes neurais, deep learning e visão computacional, utilizando Keras e TensorFlow. Confira abaixo:

Curso Redes Neurais, Deep Learning e Visão Computacional

Neste curso você aprenderá não apenas a dominar o Keras e o TensorFLow, como também resolverá problemas reais utilizando a ferramenta, aplicando conceitos avançados de IA. Aproveite!

Leia também: