Path: blob/master/site/pt-br/guide/keras/sequential_model.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
O modelo Sequencial
Configuração
Quando usar um modelo sequencial
Um modelo Sequential
é apropriado para uma pilha simples de camadas em que cada camada tem exatamente um tensor de entrada e um tensor de saída.
Esquematicamente, o seguinte modelo Sequential
:
é equivalente a esta função:
Um modelo sequencial não é apropriado quando:
Seu modelo tem múltiplas entradas ou saídas
Qualquer uma de suas camadas tem múltiplas entradas ou saídas
Você precisar fazer compartilhamento de camadas
Você quiser uma topologia não linear (por exemplo, uma conexão residual, um modelo multi-branch)
Criando um modelo sequencial
Você pode criar um modelo sequencial passando uma lista de camadas para o construtor Sequential:
Suas camadas são acessíveis através do atributo layers
:
Você também pode criar um modelo sequencial de forma incremental através do método add()
:
Observe que há também um método pop()
correspondente para remover camadas: um modelo sequencial se comporta de maneira muito semelhante a uma lista de camadas.
Observe também que o construtor Sequential aceita um argumento name
, assim como qualquer camada ou modelo em Keras. Isto é útil para anotar grafos do TensorBoard com nomes semanticamente significativos.
Especificando o formato de entrada com antecedência
Geralmente, todas as camadas em Keras precisam conhecer o formato de suas entradas para poderem criar seus pesos. Então, quando você cria uma camada como esta, inicialmente ela não tem pesos:
Ela cria seus pesos na primeira vez que é chamada numa entrada, pois a forma dos pesos depende do formato das entradas:
Naturalmente, isto também vale para os modelos sequenciais. Quando você instancia um modelo sequencial sem um formato de entrada, ele não é "construído": ele não tem pesos (e chamar model.weights
resulta num erro que informa exatamente isso). Os pesos são criados quando o modelo vê pela primeira vez alguns dados de entrada:
Depois que um modelo é "construído", você pode chamar seu método summary()
para exibir seu conteúdo:
No entanto, pode ser muito útil ao construir um modelo sequencial de forma incremental, poder mostrar o resumo do modelo até o momento, incluindo o formato de saída atual. Nesse caso, você deve iniciar seu modelo passando um objeto Input
para seu modelo, para que ele conheça seu formato de entrada desde o início:
Observe que o objeto Input
não é exibido como parte de model.layers
, já que não é uma camada:
Uma alternativa simples é simplesmente passar um argumento input_shape
para sua primeira camada:
Modelos construídos com um formato de entrada predefinido como este sempre têm pesos (mesmo antes de ver quaisquer dados) e sempre têm um formato de saída definido.
Em geral, é uma prática recomendada sempre especificar antecipadamente o formato de entrada de um modelo sequencial se você souber qual é.
Um workflow de depuração comum: add()
+ summary()
Ao construir uma nova arquitetura sequencial, é útil empilhar camadas de forma incremental com add()
e imprimir resumos de modelos com frequência. Por exemplo, isso permite que você monitore como uma pilha de camadas Conv2D
e MaxPooling2D
está diminuindo a resolução (downsampling) dos mapas de características da imagem:
Muito prático, não é mesmo?
O que fazer depois de que você tiver um modelo
Assim que a arquitetura do seu modelo estiver pronta, você vai querer:
Treinar seu modelo, avaliá-lo e executar a inferência. Consulte nosso guia de treinamento e avaliação com os loops integrados
Salvar seu modelo no disco e restaurá-lo. Veja nosso guia para serialização e salvamento.
Acelerar o treinamento do modelo aproveitando várias GPUs. Consulte nosso guia para treinamento multi-GPU e distribuído.
Extração de características com um modelo sequencial
Depois que um modelo sequencial for construído, ele se comporta como um modelo de API funcional. Isto significa que cada camada tem um atributo input
e output
. Esses atributos podem ser usados para fazer coisas legais, como criar rapidamente um modelo que extrai as saídas de todas as camadas intermediárias em um modelo sequencial:
Aqui está um exemplo semelhante que extrai apenas características (features) de uma camada:
Aprendizado por transferência com um modelo sequencial
O aprendizado por transferência (transfer learning) consiste em congelar as camadas inferiores em um modelo e treinar apenas as camadas superiores. Se você não estiver familiarizado com ele, não deixe de ler nosso guia sobre aprendizado por transferência.
Aqui estão dois esquemas comuns de aprendizado por transferência envolvendo modelos sequenciais.
Primeiro, digamos que você tenha um modelo sequencial e queira congelar todas as camadas, exceto a última. Nesse caso, você pode simplesmente iterar sobre model.layers
e definir layer.trainable = False
em cada camada, exceto na última. Assim:
Outra estratégia comum é usar um modelo sequencial para empilhar um modelo pré-treinado e algumas camadas de classificação recém-inicializadas. Assim:
Se você usa aprendizado por transferência, provavelmente vai utilizar esses dois padrões com frequência.
Isso é tudo o que você precisa saber sobre modelos sequenciais!
Para saber mais sobre a construção de modelos em Keras, consulte: