Path: blob/master/site/pt-br/guide/migrate/upgrade.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
Reescrevendo automaticamente os símbolos das APIs TF 1.x e compat.v1
Migrar para a API do TensorFlow 2.x das APIs do TF 1.x e tf.compat.v1
envolve realizar várias alterações como reordenar argumentos, renomear símbolos e mudar os valores padrão para parâmetros. Realizar todas essas modificações manualmente não apenas é chato, como também é sujeito a erros. Para simplificar as alterações e deixar sua transição para o TF 2.x a mais perfeita possível, a equipe do TensorFlow criou o utilitário tf_upgrade_v2
para ajudar na transição do código legado para a nova API.
Observação: tf_upgrade_v2
é instalado automaticamente para o TensorFlow 1.13 e posterior (incluindo todos os builds do TF 2.x).
O uso típico está mostrado a seguir:
tf_upgrade_v2 \ --intree my_project/ \ --outtree my_project_v2/ \ --reportfile report.txt
Isto vai acelerar seu processo de upgrade convertendo os scripts Python existentes do TensorFlow 1.x para o TensorFlow 2.x.
O script de conversão automatiza diversas transformações mecânicas da API, embora muitas APIs não possam ser migradas automaticamente. Ele também não é capaz de deixar seu código totalmente compatível com os comportamentos e APIs do TF2. Portanto, é apenas uma parte de sua jornada de migração.
Módulos de compatibilidade
Determinados símbolos da API não podem ser atualizados simplesmente com uma substituição do string. Aqueles que não podem ser atualizados automaticamente serão mapeados para seus locais no módulo compat.v1
. Este módulo substitui símbolos TF 1.x como tf.foo
pela referência tf.compat.v1.foo
equivalente. Se você já estiver usando APIs compat.v1
através da importação do TF via import tensorflow.compat.v1 as tf
, o script tf_upgrade_v2
tentará converter esses usos para as APIs não compatíveis sempre que possível. Observe que, embora algumas APIs compat.v1
sejam compatíveis com os comportamentos do TF2.x, muitas outras não são. Portanto, é recomendável revisar manualmente as substituições e migrá-las para novas APIs no namespace tf.*
em vez do namespace tf.compat.v1
o mais rápido possível.
Devido às descontinuações (deprecations) do módulo TensorFlow 2.x (por exemplo, tf.flags
e tf.contrib
), algumas alterações não podem ser contornadas mudando para compat.v1
. A atualização desse código pode exigir o uso de uma biblioteca adicional (por exemplo, absl.flags
) ou a mudança para um pacote em tensorflow/addons.
Processo de atualização recomendado
O restante deste guia demonstra como usar o script de reescrita de símbolos. Embora o script seja fácil de usar, é altamente recomendável usá-lo como parte do seguinte processo:
Teste de unidade: certifique-se de que o código que você está atualizando tenha um conjunto de testes de unidade com cobertura razoável. Como trata-se de código Python, a linguagem não vai oferecer proteção contra diversas classes de erros. Certifique-se também de que qualquer dependência já tenha sido atualizada para ser compatível com o TensorFlow 2.x.
Instale o TensorFlow 1.15: faça o upgrade do seu TensorFlow para a versão mais recente do TensorFlow 1.x, pelo menos a versão 1.15. Isto inclui a API final do TensorFlow 2.0 em
tf.compat.v2
.Faça testes com a versão 1.15: Certifique-se de que seus testes de unidade passem nesta etapa. Você vai executá-los repetidamente durante o upgrade, portanto, começar com os testes rodando no verde é importante.
Execute o script de atualização: execute
tf_upgrade_v2
em toda a sua árvore de código-fonte, inclusive testes. Isto vai atualizar seu código para um formato em que ele usará apenas os símbolos disponíveis no TensorFlow 2.0. Os símbolos descontinuados serão acessados comtf.compat.v1
. Eventualmente, eles exigirão atenção manual, mas não imediatamente.Execute os testes convertidos com o TensorFlow 1.15: seu código ainda deve funcionar bem no TensorFlow 1.15. Execute seus testes de unidade novamente. Qualquer erro em seus testes nesta etapa significa que há um bug no script de upgrade. Por favor, conte para a gente .
Verifique se há avisos e erros no relatório de upgrade: o script grava um arquivo de relatório que explica todas as conversões que você deve verificar novamente ou qualquer ação manual que precise ser executada. Por exemplo: Quaisquer instâncias restantes de contrib exigirão ação manual para serem removidas. Consulte o RFC para obter mais instruções.
Instale o TensorFlow 2.x: neste ponto, já deve ser seguro mudar para os binários do TensorFlow 2.x, mesmo que você esteja executando com comportamentos legados
Teste com
v1.disable_v2_behavior
: Executar novamente seus testes comv1.disable_v2_behavior()
na função principal dos testes deve fornecer os mesmos resultados da execução na versão 1.15.Ative o comportamento V2: agora que seus testes funcionam usando os binários do TF2, você pode começar a migrar seu código para evitar objetos
tf.estimator
e usar apenas os comportamentos TF2 suportados (sem desativar o comportamento TF2). Consulte os Guias de migração para mais detalhes.
Usando o script de reescrita de símbolos tf_upgrade_v2
Configuração
Antes de começar, verifique se o TensorFlow 2.x está instalado.
Clone o repositório git tensorflow/models para que você tenha código para testar:
Leia a ajuda
O script deve ser instalado com o TensorFlow. Aqui está a ajuda integrada:
Exemplo de código TF1
Eis aqui um script simples em TensorFlow 1.0:
Com o TensorFlow 2.x instalado ele não roda:
Único arquivo
O script pode ser executado em um único arquivo Python:
O script imprimirá erros se não conseguir encontrar uma correção para o código.
Árvore de diretórios
Projetos típicos, incluindo este exemplo simples, irão conter muito mais de um único arquivo. Normalmente você vai querer fazer upgrade de um pacote inteiro, portanto, o script também pode ser executado numa árvore de diretórios:
Observe o aviso sobre a função dataset.make_one_shot_iterator
.
Agora o script funciona com o TensorFlow 2.x:
Observe que, como o módulo tf.compat.v1
está incluído no TF 1.15, o script convertido também roda no TensorFlow 1.15.
Relatório detalhado
O script também relata uma lista de alterações em detalhes. Neste exemplo, ele encontrou uma transformação possivelmente insegura e incluiu um aviso na parte superior do arquivo:
Observe novamente o aviso sobre a Dataset.make_one_shot_iterator function
.
Em outros casos, a saída explicará o raciocínio para alterações não triviais:
Aqui está o conteúdo do arquivo modificado, observe como o script adiciona nomes de argumento para lidar com argumentos movidos e renomeados:
Um projeto maior poderá conter alguns erros. Por exemplo, converta o modelo deeplab:
Produziu os arquivos de saída a seguir:
Mas houve erros. O relatório ajudará você a identificar o que precisa corrigir antes que isso seja executado. Aqui estão os três primeiros erros:
Modo "Safety" (segurança)
O script de conversão também possui um modo SAFETY
menos invasivo que simplesmente altera as importações para usar o módulo tensorflow.compat.v1
:
Como você pode ver, ele não atualiza seu código, mas permite que o código do TensorFlow 1 seja executado em binários do TensorFlow 2. Veja que isto não significa que seu código está executando comportamentos TF 2.x suportados!
Ressalvas
Não atualize partes de seu código manualmente antes de executar este script. Em particular, funções que tiveram argumentos reordenados como
tf.math.argmax
outf.batch_to_space
fazem com que o script adicione incorretamente argumentos de palavras-chave que mapeiam incorretamente seu código existente.O script assume que
tensorflow
é importado usandoimport tensorflow as tf
ouimport tensorflow.compat.v1 as tf
.Este script não reordena os argumentos. Em vez disso, o script adiciona argumentos de palavra-chave a funções que têm seus argumentos reordenados.
Dê uma olhada em tf2up.ml para obter uma ferramenta conveniente para atualizar notebooks Jupyter e arquivos Python em um repositório GitHub.
Para relatar bugs de script de atualização ou fazer solicitações de recursos, registre um issue no GitHub.