Path: blob/master/site/pt-br/tutorials/customization/custom_layers.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
Camadas personalizadas
Recomendamos usar tf.keras
como uma API de alto nível para criar redes neurais. No entanto, a maioria das APIs do TensorFlow podem ser usadas com a eager execution.
Camadas: conjuntos comuns de operações úteis
Na maior parte do tempo, ao escrever código para modelos de aprendizado de máquina, você precisa operar a um nível mais alto de abstração que nas operações individuais e na manipulação de variáveis individuais.
Vários modelos de aprendizado de máquina podem ser expressos como a composição e o empilhamento de camadas relativamente simples, e o TensorFlow oferece tanto um conjunto de camadas bastante comuns quanto maneiras fáceis de você escrever suas próprias camadas específicas aos aplicativos, seja do zero ou como a composição de camadas existentes.
O TensorFlow inclui a API Keras completa no pacote tf.keras, e as camadas do Keras são muito úteis ao criar seus próprios modelos.
Confira a lista completa de camadas pré-existentes na documentação. Ela inclui a Dense (uma camada totalmente conectada), Conv2D, LSTM, BatchNormalization, Dropout e várias outras.
Implementando camadas personalizadas
A melhor maneira de implementar sua própria camada é estender a classe tf.keras.Layer e implementar:
__init__
, onde você pode fazer toda a inicialização independente de entradabuild
, onde você descobre os formatos dos tensores de entrada e pode fazer o resto da inicializaçãocall
, onde você faz a computação direta
Você não precisa esperar até que build
seja chamado para criar suas variáveis. Elas também podem ser criadas em __init__
. No entanto, a vantagem de criá-las no build
é que isso permite a criação tardia de variáveis com base no formato das entradas para operação da camada. Por outro lado, com a criação de variáveis em __init__
, os formatos necessários para criar as variáveis precisarão ser especificados explicitamente.
Em geral, o código é mais fácil de ler e manter quando ele usa camadas padrão sempre que possível, já que os outros leitores estarão familiarizados com o comportamento dessas camadas. Se você quiser usar uma camada que não esteja em tf.keras.layers
, considere criar um issue no GitHub ou, melhor ainda, enviar um pull request!
Modelos: composição de camadas
Vários elementos interessantes que se assemelham a camadas nos modelos de aprendizado de máquina são implementados com a composição de camadas existentes. Por exemplo, cada bloco residual em uma resnet é uma composição de convoluções, normalizações de lotes e um atalho. As camadas podem ser aninhadas dentro de outras camadas.
Geralmente, você herda de keras.Model
quando precisa de métodos de modelo, como: Model.fit
,Model.evaluate
e Model.save
(confira mais detalhes em Camadas e modelos personalizados do Keras).
Outro recurso fornecido por keras.Model
(em vez de keras.layers.Layer
) é que, além de rastrear as variáveis, o keras.Model
também rastreia as camadas internas, facilitando a inspeção delas.
Por exemplo, aqui está um bloco da ResNet:
No entanto, na maior parte do tempo, os modelos que compõem várias camadas simplesmente chamam uma camada após a outra. Isso pode ser feito com muito pouco código usando tf.keras.Sequential
:
Próximos passos
Agora, você pode voltar para o notebook anterior e adaptar o exemplo de regressão linear usando camadas e modelos para deixá-lo mais bem estruturado.