

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Adapte seu roteiro TensorFlow de treinamento
<a name="debugger-modify-script-tensorflow"></a>

Para começar a coletar tensores de saída do modelo e depurar problemas de treinamento, faça as seguintes modificações em seu script de TensorFlow treinamento.

**Crie um gancho para trabalhos de treinamento em SageMaker IA**

```
import smdebug.tensorflow as smd

hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)
```

Isso cria um problema quando você inicia um trabalho SageMaker de treinamento. Quando você inicia um trabalho de treinamento [Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker](debugger-configuration-for-debugging.md) com qualquer um dos `DebuggerHookConfig``TensorBoardConfig`, ou `Rules` em seu estimador, a SageMaker IA adiciona um arquivo de configuração JSON à sua instância de treinamento que é captado pelo método. `smd.get_hook` Observe que, se você não incluir nenhuma configuração APIs em seu estimador, não haverá nenhum arquivo de configuração para o gancho encontrar e a função retornará. `None`

**(Opcional) Crie um gancho para treinar trabalhos fora da SageMaker IA**

Se você executa trabalhos de treinamento no modo local, diretamente nas instâncias do SageMaker Notebook, nas instâncias do Amazon EC2 ou em seus próprios dispositivos locais, use a `smd.Hook` classe para criar um gancho. No entanto, essa abordagem só pode armazenar as coleções de tensores e pode ser usada para TensorBoard visualização. SageMaker As regras integradas do Debugger não funcionam com o modo local. Neste caso, o método `smd.get_hook` também retorna a `None`. 

Se você quiser criar um hook manual, use o seguinte trecho de código com a lógica para verificar se o hook retorna a `None` e cria um hook manual usando a classe `smd.Hook`:

```
import smdebug.tensorflow as smd

hook=smd.get_hook(hook_type="keras", create_if_not_exists=True) 

if hook is None:
    hook=smd.KerasHook(
        out_dir='/path/to/your/local/output/',
        export_tensorboard=True
    )
```

Depois de adicionar o código de criação do gancho, vá para o tópico a seguir para TensorFlow Keras.

**nota**  
SageMaker Atualmente, o Debugger suporta TensorFlow apenas Keras.

## Registre o gancho em seu TensorFlow script de treinamento Keras
<a name="debugger-modify-script-tensorflow-keras"></a>

O procedimento a seguir mostra como usar o hook e seus métodos para coletar escalares e tensores de saída do seu modelo e otimizador.

1. Empacote seu modelo e otimizador Keras com os métodos de classe do hook.

   O método `hook.register_model()` pega seu modelo e percorre cada camada, procurando por tensores que correspondam às expressões regulares que você fornecerá por meio da configuração em [Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker](debugger-configuration-for-debugging.md). Os tensores coletáveis por meio desse método de hook são pesos, tendências e ativações.

   ```
   model=tf.keras.Model(...)
   hook.register_model(model)
   ```

1. Empacote o otimizador pelo método `hook.wrap_optimizer()`.

   ```
   optimizer=tf.keras.optimizers.Adam(...)
   optimizer=hook.wrap_optimizer(optimizer)
   ```

1. Compile o modelo no modo ávido em. TensorFlow

   Para coletar tensores do modelo, como os tensores de entrada e saída de cada camada, você deve executar o treinamento no modo eager. Caso contrário, o SageMaker AI Debugger não conseguirá coletar os tensores. No entanto, outros tensores, como pesos, tendências e perdas do modelo, podem ser coletados sem serem executados explicitamente no modo eager.

   ```
   model.compile(
       loss="categorical_crossentropy", 
       optimizer=optimizer, 
       metrics=["accuracy"],
       # Required for collecting tensors of each layer
       run_eagerly=True
   )
   ```

1. Registre o hook no método [https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit](https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit).

   Para coletar os tensores dos hooks que você registrou, adicione `callbacks=[hook]` ao método da classe `model.fit()` do Keras. Isso fará com que o hook de `sagemaker-debugger` passe como um retorno de chamada do Keras.

   ```
   model.fit(
       X_train, Y_train,
       batch_size=batch_size,
       epochs=epoch,
       validation_data=(X_valid, Y_valid),
       shuffle=True, 
       callbacks=[hook]
   )
   ```

1. TensorFlow 2.x fornece somente variáveis de gradiente simbólico que não fornecem acesso aos seus valores. Para coletar gradientes, empacote `tf.GradientTape` pelo método [https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html#tensorflow-specific-hook-api](https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html#tensorflow-specific-hook-api), que exige que você escreva sua própria etapa de treinamento da seguinte maneira:

   ```
   def training_step(model, dataset):
       with hook.wrap_tape(tf.GradientTape()) as tape:
           pred=model(data)
           loss_value=loss_fn(labels, pred)
       grads=tape.gradient(loss_value, model.trainable_variables)
       optimizer.apply_gradients(zip(grads, model.trainable_variables))
   ```

   Ao empacotar a fita, o hook de `sagemaker-debugger` pode identificar tensores de saída, como gradientes, parâmetros e perdas. Empacotar a fita garante que o `hook.wrap_tape()` método em torno das funções do objeto de fita, como`push_tape()`,, `pop_tape()``gradient()`, configure os gravadores do SageMaker Debugger e salve os tensores que são fornecidos como entrada (variáveis treináveis e perda) e saída de `gradient()` (gradientes). `gradient()`
**nota**  
Para coletar com um loop de treinamento personalizado, certifique-se de usar o modo eager. Caso contrário, o SageMaker Debugger não conseguirá coletar nenhum tensor.

Para ver uma lista completa das ações que o `sagemaker-debugger` gancho APIs oferece para construir ganchos e salvar tensores, consulte [Hook Methods](https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html) na documentação do SDK do *`sagemaker-debugger`Python*.

Depois de concluir a adaptação do seu script de treinamento, prossiga para [Inicie trabalhos de treinamento com o Debugger usando o SDK do Python SageMaker](debugger-configuration-for-debugging.md).