

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Adatta il tuo script di allenamento TensorFlow
<a name="debugger-modify-script-tensorflow"></a>

Per iniziare a raccogliere i tensori di output del modello ed eseguire il debug dei problemi di addestramento, apporta le seguenti modifiche allo script di addestramento. TensorFlow 

**Crea un hook per i lavori di formazione all'interno dell'IA SageMaker **

```
import smdebug.tensorflow as smd

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

Questo crea un gancio quando inizi un lavoro SageMaker di formazione. Quando avvii un processo di formazione [Avvia lavori di formazione con Debugger utilizzando Python SDK SageMaker](debugger-configuration-for-debugging.md) con uno qualsiasi degli strumenti o `Rules` tramite il `DebuggerHookConfig` tuo estimatore, SageMaker AI aggiunge un file di configurazione JSON all'istanza di formazione che viene raccolto dal `smd.get_hook` metodo. `TensorBoardConfig` Nota che se non includi alcuna configurazione APIs nel tuo estimatore, non ci sarà alcun file di configurazione che l'hook possa trovare e la funzione verrà restituita. `None`

**(Facoltativo) Crea un hook per i lavori di formazione al di fuori dell'IA SageMaker **

Se esegui lavori di formazione in modalità locale, direttamente su istanze SageMaker Notebook, istanze Amazon EC2 o sui tuoi dispositivi locali, `smd.Hook` usa la classe per creare un hook. Tuttavia, questo approccio può solo memorizzare le raccolte di tensori e utilizzarlo per la visualizzazione. TensorBoard SageMaker Le regole integrate di Debugger non funzionano con la modalità locale. Il metodo `smd.get_hook` restituisce `None` anche in questo caso. 

Se desideri creare un hook manuale, usa il seguente frammento di codice con la logica per verificare se l'hook restituisce `None` restituisce e crea un hook manuale utilizzando la 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
    )
```

Dopo aver aggiunto il codice di creazione dell'hook, passa al seguente argomento per Keras. TensorFlow

**Nota**  
SageMaker Debugger attualmente supporta solo Keras. TensorFlow 

## Registra l'hook nello script di addestramento Keras TensorFlow
<a name="debugger-modify-script-tensorflow-keras"></a>

La seguente procedura illustra come utilizzare l'hook e i suoi metodi per raccogliere scalari e tensori di output dal modello e dall'ottimizzatore.

1. Esegui il wrapping del tuo modello e ottimizzatore Keras con i metodi di classe dell'hook.

   Il metodo `hook.register_model()` prende il tuo modello e scorre attraverso ogni livello, cercando i tensori che corrispondono alle espressioni regolari che fornirai attraverso la configurazione in [Avvia lavori di formazione con Debugger utilizzando Python SDK SageMaker](debugger-configuration-for-debugging.md). I tensori raccolti tramite questo metodo hook sono pesi, bias e attivazioni.

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

1. Esegui il wrapping dell'ottimizzatore secondo il metodo `hook.wrap_optimizer()`.

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

1. Compila il modello in modalità eager in. TensorFlow

   Per raccogliere tensori dal modello, come i tensori di input e output di ogni livello, è necessario eseguire l'addestramento in modalità eager. Altrimenti, SageMaker AI Debugger non sarà in grado di raccogliere i tensori. Tuttavia, altri tensori, come i pesi dei modelli, i bias e la perdita, possono essere raccolti senza che vengano eseguiti esplicitamente in modalità eager.

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

1. Registra l'hook nel metodo [https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit](https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit).

   Per raccogliere i tensori dagli hook che hai registrato, aggiungi `callbacks=[hook]` al metodo della classe `model.fit()` Keras. Questo passerà l'hook `sagemaker-debugger` come callback 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 fornisce solo variabili gradienti simboliche che non forniscono l'accesso ai loro valori. Per raccogliere i gradienti, esegui il wrapping di `tf.GradientTape` secondo il metodo [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), che richiede di scrivere la tua fase di addestramento come segue.

   ```
   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))
   ```

   Eseguendo il wrapping del nastro, l’hook `sagemaker-debugger` è in grado di identificare tensori di uscita come gradienti, parametri e perdite. L'avvolgimento del nastro assicura che il `hook.wrap_tape()` metodo basato sulle funzioni dell'oggetto tape, ad esempio,, configuri gli autori di SageMaker Debugger e salvi i tensori forniti come input (variabili addestrabili e perdita) e output di `gradient()` (gradienti). `push_tape()` `pop_tape()` `gradient()` `gradient()`
**Nota**  
Per raccogliere con un ciclo di addestramento personalizzato, assicurati di utilizzare la modalità eager. Altrimenti, Debugger non è in grado di raccogliere alcun SageMaker tensore.

*Per un elenco completo delle azioni APIs offerte dall'`sagemaker-debugger`hook per costruire hook e salvare tensori, consulta [Hook Methods nella](https://sagemaker-debugger.readthedocs.io/en/website/hook-methods.html) documentazione di Python `sagemaker-debugger` SDK.*

Dopo aver completato l'adattamento dello script di addestramento, procedi con [Avvia lavori di formazione con Debugger utilizzando Python SDK SageMaker](debugger-configuration-for-debugging.md).