Path: blob/master/site/pt-br/guide/variable.ipynb
25115 views
Copyright 2020 The TensorFlow Authors.
Introdução às variáveis
Uma variável do TensorFlow é a maneira recomendável de representar o estado persistente compartilhado que seu programa manipula. Este guia aborda como criar, atualizar e gerenciar instâncias de tf.Variable
no TensorFlow.
As variáveis são criadas e rastreadas pela classe tf.Variable
. Uma tf.Variable
representa um tensor com um valor que pode ser alterado ao executar ops nele. Ops específicas permitem que você leia e modifique os valores desse tensor. Bibliotecas de nível superior, como tf.keras
, usam tf.Variable
para armazenar parâmetros do modelo.
Configuração
Este notebook discute o posicionamento de variáveis. Se você quiser ver em qual dispositivo estão suas variáveis, descomente esta linha.
Criação de uma variável
Para criar uma variável, forneça um valor inicial. A tf.Variable
terá o mesmo dtype
que o valor de inicialização.
Uma variável se parece e age como um tensor, mas, na verdade, é uma estrutura de dados apoiada por um tf.Tensor
. Como tensores, ela tem um dtype
e um formato, além de poder ser exportada para o NumPy.
A maioria das operações de tensores funcionam com as variáveis como esperado. No entanto, as variáveis não podem ter o formato alterado.
Conforme observado acima, as variáveis são apoiadas por tensores. Você pode reatribuir o tensor usando tf.Variable.assign
. Chamar assign
(geralmente) não aloca um novo tensor. Em vez disso, a memória do tensor existente é reutilizada.
Se você usa uma variável como um tensor nas operações, geralmente operará no tensor de apoio.
A criação de novas variáveis a partir de outras existentes duplica os tensores de apoio. Duas variáveis não compartilham a mesma memória.
Ciclos de vida, nomes e monitoramento
No TensorFlow baseado em Python, a instância tf.Variable
tem o mesmo ciclo de vida que outros objetos no Python. Quando não há referências a uma variável, ela é desalocada automaticamente.
As variáveis também podem ser nomeadas, o que pode ajudar você com o rastreamento e a depuração delas. É possível dar o mesmo nome a duas variáveis.
Os nomes das variáveis são preservados ao salvar e carregar modelos. Por padrão, as variáveis nos modelos adquirem nomes exclusivos automaticamente, então você não precisa atribui-los por contra própria a menos que queira.
As variáveis são importantes para a diferenciação, mas algumas não precisam ser diferenciadas. Você pode desativar os gradientes de uma variável ao definir trainable
como falso durante a criação. Um exemplo de variável que não precisa de gradientes é um contador de passos de treinamento.
Posicionamento de variáveis e tensores
Para o melhor desempenho, o TensorFlow tentará colocar os tensores e as variáveis no dispositivo mais rápido compatível com o dtype
. Isso significa que a maioria das variáveis serão colocadas em uma GPU, se disponível.
No entanto, você pode modificar isso. Neste snippet, coloque um tensor float e uma variável na CPU, mesmo se uma GPU estiver disponível. Ao ativar o registro de posicionamento de dispositivo (confira a Configuração), você pode ver onde a variável foi colocada.
Observação: embora o posicionamento manual funcione, o uso das estratégias de distribuição pode ser uma maneira mais conveniente e escalável de otimizar sua computação.
Ao executar este notebook em diferentes backends com e sem uma GPU, você verá registros diferentes. Observe que o registro de posicionamento de dispositivo precisa ser ativado no início da sessão.
É possível definir o local de uma variável ou um tensor em um dispositivo e fazer a computação em outro dispositivo. Isso introduzirá atraso, já que os dados precisam ser copiados entre dispositivos.
Você pode fazer isso, porém, se tiver vários workers de GPU, mas só quiser uma cópia das variáveis.
Observação: como tf.config.set_soft_device_placement
é ativado por padrão, mesmo se você executar esse código em um dispositivo sem GPU, ele ainda será executado. A etapa de multiplicação ainda ocorrerá na CPU.
Para saber mais sobre o treinamento distribuído, consulte o guia.
Próximos passos
Para entender como as variáveis são geralmente usadas, veja nosso guia sobre a diferenciação automática.