Como usar a API funcional Keras para aprendizado profundo

Como usar a API funcional Keras para aprendizado profundo

A biblioteca Keras Python torna a criação de modelos de aprendizagem profunda rápida e fácil.

A API sequencial permite criar modelos camada por camada para a maioria dos problemas. É limitado porque não permite a criação de modelos que compartilham camadas ou possuem várias entradas ou saídas.

A API funcional do Keras é uma maneira alternativa de criar modelos que oferece muito mais flexibilidade, incluindo a criação de modelos mais complexos.

Neste tutorial, você descobrirá como usar a API funcional mais flexível do Keras para definir modelos de aprendizado profundo.

Depois de concluir este tutorial, você saberá:

  • A diferença entre as APIs sequenciais e funcionais.
  • Como definir modelos simples de Perceptron Multicamadas, Rede Neural Convolucional e Rede Neural Recorrente usando a API funcional.
  • Como definir modelos mais complexos com camadas compartilhadas e múltiplas entradas e saídas.

Comece seu projeto com meu novo livro Deep Learning With Python, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

  • Atualização novembro / 2017: Adicionada nota sobre dimensão suspensa para camadas de entrada.
  • Atualização novembro / 2018: Adicionada camada de nivelamento ausente para CNN, obrigado Konstantin.
  • Atualização novembro / 2018: Adicionada descrição da sintaxe funcional do Python da API.

Visão geral do tutorial

Este tutorial é dividido em 7 partes; eles estão:

  1. Modelos Seqüenciais Keras
  2. Modelos Funcionais Keras
  3. Modelos de rede padrão
  4. Modelo de camadas compartilhadas
  5. Vários modelos de entrada e saída
  6. Melhores Práticas
  7. NOVO: Observação sobre a sintaxe funcional da API Python

1. Modelos sequenciais de Keras

Como uma revisão, Keras fornece uma API de modelo sequencial.

Se você é novo no Keras ou no aprendizado profundo, consulte este tutorial passo a passo do Keras.

A API do modelo Sequential é uma maneira de criar modelos de aprendizado profundo, onde uma instância da classe Sequential é criada e as camadas do modelo são criadas e adicionadas a ela.

Por exemplo, as camadas podem ser definidas e passadas para o Sequencial como uma matriz:

As camadas também podem ser adicionadas por partes:

A API do modelo sequencial é ótima para desenvolver modelos de aprendizado profundo na maioria das situações, mas também tem algumas limitações.

Por exemplo, não é simples definir modelos que podem ter várias fontes de entrada diferentes, produzir vários destinos de saída ou modelos que reutilizam camadas.

2. Modelos Funcionais Keras

A API funcional Keras fornece uma maneira mais flexível para definir modelos.

Ele permite especificamente que você defina vários modelos de entrada ou saída, bem como modelos que compartilham camadas. Mais do que isso, permite definir gráficos de rede acíclicos ad hoc.

Os modelos são definidos criando instâncias de camadas e conectando-as diretamente entre si em pares e, em seguida, definindo um modelo que especifica as camadas para atuar como entrada e saída para o modelo.

Vejamos os três aspectos exclusivos da API funcional do Keras, por sua vez:

1. Definindo a entrada

Ao contrário do modelo Sequencial, você deve criar e definir uma camada de entrada independente que especifica a forma dos dados de entrada.

A camada de entrada tem um argumento de forma que é uma tupla que indica a dimensionalidade dos dados de entrada.

Quando os dados de entrada são unidimensionais, como para um Perceptron multicamadas, a forma deve deixar espaço explicitamente para a forma do tamanho do minilote usado ao dividir os dados durante o treinamento da rede. Portanto, a tupla de forma é sempre definida com uma última dimensão suspensa quando a entrada é unidimensional (2,), por exemplo:

2. Camadas de conexão

As camadas do modelo são conectadas aos pares.

Isso é feito especificando de onde vem a entrada ao definir cada nova camada. Uma notação de colchetes é usada, de forma que após a camada ser criada, a camada de onde vem a entrada para a camada atual é especificada.

Vamos deixar isso claro com um pequeno exemplo. Podemos criar a camada de entrada como acima e, em seguida, criar uma camada oculta como um Denso que recebe entrada apenas da camada de entrada.

Observe o (visível) após a criação da camada Densa que conecta a saída da camada de entrada como a entrada para a camada oculta densa.

É essa maneira de conectar camadas peça por peça que dá flexibilidade à API funcional. Por exemplo, você pode ver como seria fácil começar a definir gráficos ad hoc de camadas.

3. Criação do modelo

Depois de criar todas as camadas do seu modelo e conectá-las, você deve definir o modelo.

Assim como acontece com a API Sequential, o modelo é o que você pode resumir, ajustar, avaliar e usar para fazer previsões.

Keras fornece uma classe de modelo que você pode usar para criar um modelo a partir de suas camadas criadas. Exige que você especifique apenas as camadas de entrada e saída. Por exemplo:

Agora que conhecemos todas as peças-chave da API funcional do Keras, vamos trabalhar definindo um conjunto de modelos diferentes e desenvolver alguma prática com ele.

Cada exemplo é executável e imprime a estrutura e cria um diagrama do gráfico. Eu recomendo fazer isso para seus próprios modelos para deixar claro o que exatamente você definiu.

Minha esperança é que esses exemplos forneçam modelos para você quando quiser definir seus próprios modelos usando a API funcional no futuro.

3. Modelos de rede padrão

Ao começar a usar a API funcional, é uma boa ideia ver como alguns modelos de rede neural padrão são definidos.

Nesta seção, veremos como definir um Perceptron multicamadas simples, uma rede neural convolucional e uma rede neural recorrente.

Esses exemplos fornecerão uma base para a compreensão dos exemplos mais elaborados posteriormente.

Perceptron Multicamadas

Nesta seção, definimos um modelo Perceptron multicamadas para classificação binária.

O modelo possui 10 entradas, 3 camadas ocultas com 10, 20 e 10 neurônios e uma camada de saída com 1 saída. As funções de ativação linear retificada são usadas em cada camada oculta e uma função de ativação sigmóide é usada na camada de saída, para classificação binária.

Executando o exemplo imprime a estrutura da rede.

Um gráfico do modelo também é criado e salvo em um arquivo.

Gráfico de Rede Perceptron Multicamadas

Gráfico de Rede Perceptron Multicamadas

Rede Neural Convolucional

Nesta seção, definiremos uma rede neural convolucional para classificação de imagens.

O modelo recebe imagens 64 × 64 em preto e branco como entrada, então tem uma sequência de duas camadas convolucionais e agrupadas como extratores de recursos, seguido por uma camada totalmente conectada para interpretar os recursos e uma camada de saída com uma ativação sigmóide para previsões de duas classes .

Você também pode estar interessado em