

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configure el resultado de la inferencia en los contenedores generados
<a name="autopilot-automate-model-development-container-output"></a>

Piloto automático genera una lista [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html) ordenada. Esto se puede usar para crear un modelo e implementarlo en una canalización de machine learning. Este modelo se puede utilizar para el alojamiento en línea y la inferencia. 

Los clientes pueden enumerar las definiciones de los contenedores de inferencia con la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListCandidateForAutoMLJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListCandidateForAutoMLJob.html). La lista de definiciones de contenedores de inferencia que representan el mejor candidato también está disponible en la respuesta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJob.html).

## Definiciones de contenedores de inferencia para tipos de problemas de regresión y clasificación
<a name="autopilot-problem-type-container-output"></a>

Piloto automático genera contenedores de inferencia específicos para el [modo de entrenamiento](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html#autopilot-training-mode) y el [tipo de problema](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-datasets-problem-types.html#autopilot-problem-types) del trabajo.

### Definiciones de contenedores para el modo de optimización de hiperparámetros (HPO)
<a name="autopilot-problem-type-container-output-hpo"></a>
+ **Regresión**: HPO genera dos contenedores.

  1. Un contenedor de ingeniería de características que transforma las características originales en características sobre las que pueden entrenarse los algoritmos de regresión.

  1. Un contenedor de algoritmos que transforma las características y genera una puntuación de regresión para el conjunto de datos.
+ **Clasificación**: HPO genera tres contenedores.

  1. Un contenedor de ingeniería de características que transforma las características originales en características sobre las que pueden entrenarse los algoritmos de clasificación.

  1. Un contenedor de algoritmos que genera el `predicted_label` con la probabilidad más alta. Este contenedor también puede generar las diversas probabilidades asociadas a los resultados de la clasificación en la respuesta de inferencia.

  1. Un contenedor de ingeniería de características que realiza el posprocesamiento de la predicción del algoritmo. Por ejemplo, puede realizar una transformación inversa en la etiqueta prevista y cambiarla por la etiqueta original. 

### Definiciones de contenedores para el modo de ensamblaje
<a name="autopilot-problem-type-container-output-ensemble"></a>

En el modo de ensamblaje, los tipos de problemas de regresión y clasificación tienen un solo contenedor de inferencias. Este contenedor de inferencias transforma las características y genera las predicciones en función del tipo de problema. 

## Respuestas de inferencias por tipo de problema
<a name="autopilot-problem-type-inference-response"></a>

### Respuestas de inferencias para modelos de clasificación
<a name="autopilot-problem-type-inference-response-classification"></a>

En los contenedores de inferencias de clasificación, puede seleccionar el contenido de la respuesta de inferencia mediante cuatro claves predefinidas.
+ `predicted_label`: la etiqueta con la mayor probabilidad de predecir la etiqueta correcta, según lo determinado por Piloto automático.
+ `probability`: 
  + **Modelos HPO:** la probabilidad de la clase `True` para clasificación binaria. La probabilidad de `predicted_label` para la clasificación multiclase.
  + **Modelos de ensamblaje:** la probabilidad de `predicted_label` para la clasificación binaria y multiclase.
+ `probabilities`: la lista de probabilidades de todas las clases correspondientes.
+ `labels`: la lista de todas las etiquetas.

Por ejemplo, para un problema de clasificación binaria, si pasa las claves de respuesta de inferencias `['predicted_label', 'probability', 'probabilities', 'labels']` y la respuesta de salida aparece como `[1, 0.1, "[0.9, 0.1]", "['1', '0']"]`, debe interpretarla de la siguiente manera:

1. `predicted_label` es igual a `1` porque la etiqueta “1” tiene una probabilidad mayor (en este caso, `0.9`).

1. Para los modelos HPO, `probability` es igual a `0.1`, que es la probabilidad de la `positive_class` (en este caso, `0`) seleccionada por Piloto automático.

   Para los modelos de ensamblaje, `probability` es igual a `0.9`, que es la probabilidad de la `predicted_label`.

1. `probabilities` muestra la `probability` de cada etiqueta en `labels`.

1. `labels` son las etiquetas únicas del conjunto de datos, donde la segunda etiqueta (“0” en este caso) es la `positive_class` seleccionada por Piloto automático.

De forma predeterminada, los contenedores de inferencias están configurados para generar solo la `predicted_label`. Para seleccionar contenido de inferencia adicional, puede actualizar el parámetro `inference_response_keys` para incluir hasta las siguientes tres variables de entorno.
+ `SAGEMAKER_INFERENCE_SUPPORTED`: configurado para proporcionarle sugerencias sobre el contenido que admite cada contenedor.
+ `SAGEMAKER_INFERENCE_INPUT`: debe configurarse con las claves que el contenedor espera en la carga de entrada.
+ `SAGEMAKER_INFERENCE_OUTPUT`: debe rellenarse con el conjunto de claves que genera el contenedor.

### Respuestas de inferencias para modelos de clasificación en el modo HPO
<a name="autopilot-problem-type-inference-response-classification-hpo"></a>

En esta sección, se muestra cómo configurar la respuesta de inferencias de los modelos de clasificación mediante el modo de optimización de hiperparámetros (HPO).

A fin de elegir el contenido de la respuesta de inferencias en el modo HPO, añada las variables `SAGEMAKER_INFERENCE_INPUT` y `SAGEMAKER_INFERENCE_OUTPUT` a los contenedores segundo y tercero que se generan en el modo HPO para los problemas de clasificación.

Las claves que admite el segundo contenedor (algoritmo) son predicted\_label, probability y probabilities. Tenga en cuenta que, de forma deliberada, `labels` no se ha agregado a `SAGEMAKER_INFERENCE_SUPPORTED`.

Las claves que admite el contenedor del modelo de tercera clasificación son `predicted_label`, `labels`, `probability` y `probabilities`. Por lo tanto, el entorno `SAGEMAKER_INFERENCE_SUPPORTED` incluye los nombres de estas claves.

A fin de actualizar la definición de los contenedores de inferencia de modo que reciban a `predicted_label` y `probability`, utilice el siguiente ejemplo de código.

```
containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'})
containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
```

El siguiente ejemplo de código actualiza la definición de los contenedores de inferencia de modo que reciban a `predicted_label`, `labels` y `probabilities`. No transfiera `labels` al segundo contenedor (el contenedor del algoritmo), ya que el tercer contenedor lo genera de forma independiente. 

```
containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label,probabilities'})
containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label,probabilities'})
containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probabilities,labels'})
```

Las siguientes secciones plegables proporcionan ejemplos de código para AWS SDK para Python (Boto3) y para el SageMaker SDK para Python. En cada sección se muestra cómo seleccionar el contenido de las respuestas de inferencia en modo HPO para el ejemplo de código correspondiente.

#### AWS SDK para Python (Boto3)
<a name="autopilot-problem-type-inference-response-classification-hpo-boto3"></a>

```
import boto3

sm_client = boto3.client('sagemaker', region_name='{{<Region>}}')

role = '{{<IAM role>}}'
input_data = '{{<S3 input uri>}}'
output_path = '{{<S3 output uri>}}'

best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='{{<AutoML Job Name>}}')['BestCandidate']
best_candidate_containers = best_candidate['InferenceContainers']
best_candidate_name = best_candidate['{{CandidateName}}']

best_candidate_containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'})
best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})

# create model
reponse = sm_client.create_model(
    ModelName = '{{<Model Name>}}',
    ExecutionRoleArn = role,
    Containers = best_candidate_containers
)

# Lauch Transform Job
response = sm_client.create_transform_job(
    TransformJobName='{{<Transform Job Name>}}',
    ModelName='{{<Model Name>}}',
    TransformInput={
        'DataSource': {
            'S3DataSource': {
                'S3DataType': '{{S3Prefix}}',
                'S3Uri': {{input_data}}
            }
        },
        'ContentType': "text/CSV",
        'SplitType': 'Line'
    },
    TransformOutput={
        'S3OutputPath': {{output_path}},
        'AssembleWith': 'Line',
    },
    TransformResources={
        'InstanceType': '{{ml.m4.xlarge}}',
        'InstanceCount': 1,
    },
)
```

#### SageMaker SDK para Python
<a name="autopilot-problem-type-inference-response-classification-hpo-sdk"></a>

```
from sagemaker import AutoML

aml = AutoML.attach(auto_ml_job_name='{{<AutoML Job Name>}}')
aml_best_model = aml.create_model(name='{{<Model Name>}}',
                                  candidate=None,
                                  inference_response_keys**=['probabilities', 'labels'])

aml_transformer = aml_best_model.transformer(accept='text/csv',
                                            assemble_with='Line',
                                            instance_type='{{ml.m5.xlarge}}',
                                            instance_count=1,)

aml_transformer.transform('{{<S3 input uri>}}',
                          content_type='text/csv',
                          split_type='Line',
                          job_name='{{<Transform Job Name>}}',
                          wait=True)
```

### Respuestas de inferencias para modelos de clasificación en el modo ensamblaje
<a name="autopilot-problem-type-inference-response-classification-ensemble"></a>

En esta sección, se muestra cómo configurar la respuesta de inferencias de los modelos de clasificación mediante el modo de ensamblaje. 

En el **modo de ensamblaje**, para elegir el contenido de la respuesta de inferencia, actualice la variable de entorno `SAGEMAKER_INFERENCE_OUTPUT`.

Las claves que admite el contenedor del modelo de clasificación son `predicted_label`, `labels`, `probability` y `probabilities`. Estas claves se incluyen en el entorno `SAGEMAKER_INFERENCE_SUPPORTED`.

A fin de actualizar la definición de los contenedores de inferencia de modo que reciban a `predicted_label` y `probability`, consulte el siguiente ejemplo de código.

```
containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
```

La siguiente sección contraíble proporciona un ejemplo de código para seleccionar el contenido de las respuestas de inferencia en el modo de ensamblaje. El ejemplo usa AWS SDK para Python (Boto3).

#### AWS SDK para Python (Boto3)
<a name="autopilot-problem-type-inference-response-classification-ensembling-boto3"></a>

```
import boto3
sm_client = boto3.client('sagemaker', region_name='{{<Region>}}')

role = '{{<IAM role>}}'
input_data = '{{<S3 input uri>}}'
output_path = '{{<S3 output uri>}}' 

best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='{{<AutoML Job Name>}}')['BestCandidate']
best_candidate_containers = best_candidate['InferenceContainers']
best_candidate_name = best_candidate['{{CandidateName}}']

*best_candidate_containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})
*
# create model
reponse = sm_client.create_model(
    ModelName = '{{<Model Name>}}',
    ExecutionRoleArn = role,
    Containers = best_candidate_containers
)

# Lauch Transform Job
response = sm_client.create_transform_job(
    TransformJobName='{{<Transform Job Name>}}',
    ModelName='{{<Model Name>}}',
    TransformInput={
        'DataSource': {
            'S3DataSource': {
                'S3DataType': '{{S3Prefix}}',
                'S3Uri': input_data
            }
        },
        'ContentType': "text/CSV",
        'SplitType': 'Line'
    },
    TransformOutput={
        'S3OutputPath': output_path,
        'AssembleWith': 'Line',
    },
    TransformResources={
        'InstanceType': '{{ml.m4.xlarge}}',
        'InstanceCount': 1,
    },
)
```

La siguiente sección plegable proporciona un ejemplo de código que es idéntico al ejemplo de SageMaker SDK para Python para HPO. Se incluye aquí para acceder con comodidad.

#### SageMaker SDK para Python
<a name="autopilot-problem-type-inference-response-classification-ensembling-sdk"></a>

El siguiente ejemplo de código de HPO usa el SageMaker SDK para Python.

```
from sagemaker import AutoML

aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>')
aml_best_model = aml.create_model(name='<Model Name>',
                                  candidate=None,
                                  *inference_response_keys**=['probabilities', 'labels'])*

aml_transformer = aml_best_model.transformer(accept='text/csv',
                                            assemble_with='Line',
                                            instance_type='ml.m5.xlarge',
                                            instance_count=1,)

aml_transformer.transform('<S3 input uri>',
                          content_type='text/csv',
                          split_type='Line',
                          job_name='<Transform Job Name>',
                          wait=True)
```