

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.

# Formatos de datos comunes para la inferencia
<a name="cdf-inference"></a>

Los algoritmos de Amazon SageMaker AI aceptan y producen varios tipos de MIME diferentes para las cargas HTTP que se utilizan para recuperar predicciones en línea y de minilotes. Puede utilizar varios AWS servicios para transformar o preprocesar los registros antes de ejecutar la inferencia. Como mínimo, tiene que convertir los datos para las siguientes tareas:
+ Serialización de la solicitud de inferencias (gestionada por usted) 
+ Deserialización de la solicitud de inferencias (gestionada por el algoritmo) 
+ Serialización de la respuesta de inferencias (gestionada por el algoritmo) 
+ Deserialización de la respuesta de inferencias (gestionada por usted) 

**Topics**
+ [Conversión de datos para la serialización de la solicitud de inferencias](#ir-serialization)
+ [Conversión de datos para la deserialización de la respuesta de inferencias](#ir-deserialization)
+ [Formatos de solicitud comunes para todos los algoritmos](#common-in-formats)
+ [Uso de la transformación por lotes con algoritmos integrados](#cm-batch)

## Conversión de datos para la serialización de la solicitud de inferencias
<a name="ir-serialization"></a>

Entre las opciones de tipo de contenido para las solicitudes de inferencia de algoritmos de Amazon SageMaker AI se incluyen: `text/csv``application/json`, y`application/x-recordio-protobuf`. Los algoritmos que no admiten todos estos tipos pueden admitir otros tipos. XGBoost, por ejemplo, solo admite `text/csv` los de esta lista, pero también admite`text/libsvm`.

Para `text/csv`, el valor para el argumento Body en `invoke_endpoint` debe ser una cadena con comas que separan los valores para cada característica. Por ejemplo, un registro para un modelo con cuatro características debería tener un aspecto similar a `1.5,16.0,14,23.0`. Las transformaciones realizadas en los datos de capacitación deben realizarse también en los datos antes de la obtención de la inferencia. El orden de las características es importante, y no debe cambiarse. 

`application/json` es más flexible y proporciona varios formatos posibles para que los desarrolladores pueden usarlos en sus aplicaciones. A un nivel alto, en JavaScript, la carga útil podría tener el siguiente aspecto: 

```
let request = {
  // Instances might contain multiple rows that predictions are sought for.
  "instances": [
    {
      // Request and algorithm specific inference parameters.
      "configuration": {},
      // Data in the specific format required by the algorithm.
      "data": {
         "<field name>": dataElement
       }
    }
  ]
}
```

Tiene las siguientes opciones para especificar `dataElement`: 

**Equivalente a búferes de protocolo**

```
// Has the same format as the protocol buffers implementation described for training.
let dataElement = {
  "keys": [],
  "values": [],
  "shape": []
}
```

**Vector numérico sencillo**

```
// An array containing numeric values is treated as an instance containing a
// single dense vector.
let dataElement = [1.5, 16.0, 14.0, 23.0]

// It will be converted to the following representation by the SDK.
let converted = {
  "features": {
    "values": dataElement
  }
}
```

**Para varios registros**

```
let request = {
  "instances": [
    // First instance.
    {
      "features": [ 1.5, 16.0, 14.0, 23.0 ]
    },
    // Second instance.
    {
      "features": [ -2.0, 100.2, 15.2, 9.2 ]
    }
  ]
}
```

## Conversión de datos para la deserialización de la respuesta de inferencias
<a name="ir-deserialization"></a>

Los algoritmos de Amazon SageMaker AI devuelven JSON en varios diseños. En líneas generales, la estructura es:

```
let response = {
  "predictions": [{
    // Fields in the response object are defined on a per algorithm-basis.
  }]
}
```

Los campos incluidos en las predicciones son diferentes en los algoritmos. A continuación se muestran ejemplos de la salida del algoritmo k-means.

**Interfaz de registro único** 

```
let response = {
  "predictions": [{
    "closest_cluster": 5,
    "distance_to_cluster": 36.5
  }]
}
```

**Inferencia de varios registros**

```
let response = {
  "predictions": [
    // First instance prediction.
    {
      "closest_cluster": 5,
      "distance_to_cluster": 36.5
    },
    // Second instance prediction.
    {
      "closest_cluster": 2,
      "distance_to_cluster": 90.3
    }
  ]
}
```

**Inferencia de varios registros con entrada protobuf**

```
{
  "features": [],
  "label": {
    "closest_cluster": {
      "values": [ 5.0 ] // e.g. the closest centroid/cluster was 1.0
    },
    "distance_to_cluster": {
      "values": [ 36.5 ]
    }
  },
  "uid": "abc123",
  "metadata": "{ "created_at": '2017-06-03' }"
}
```

SageMaker Los algoritmos de IA también admiten el formato JSONLINES, donde el contenido de la respuesta por registro es el mismo que en el formato JSON. La estructura de varios registros es una colección de objetos de respuesta por registro separados por caracteres de nueva línea. El contenido de respuesta del KMeans algoritmo integrado para 2 puntos de datos de entrada es:

```
{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0}
{"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}
```

Mientras se ejecuta la transformación por lotes, se recomienda usar el tipo de respuesta `jsonlines` estableciendo el campo `Accept` de la `CreateTransformJobRequest` en `application/jsonlines`.

## Formatos de solicitud comunes para todos los algoritmos
<a name="common-in-formats"></a>

La mayoría de los algoritmos utilizan muchos de los siguientes formatos de solicitud de inferencia.

### Formato de solicitud JSON
<a name="cm-json"></a>

**Tipo de contenido:** application/JSON

**Formato denso**

```
let request =   {
    "instances":    [
        {
            "features": [1.5, 16.0, 14.0, 23.0]
        }
    ]
}


let request =   {
    "instances":    [
        {
            "data": {
                "features": {
                    "values": [ 1.5, 16.0, 14.0, 23.0]
                }
            }
        }
    ]
}
```

**Formato disperso**

```
{
	"instances": [
		{"data": {"features": {
					"keys": [26, 182, 232, 243, 431],
					"shape": [2000],
					"values": [1, 1, 1, 4, 1]
				}
			}
		},
		{"data": {"features": {
					"keys": [0, 182, 232, 243, 431],
					"shape": [2000],
					"values": [13, 1, 1, 4, 1]
				}
			}
		},
	]
}
```

### Formato de solicitud JSONLINES
<a name="cm-jsonlines"></a>

**Tipo de contenido:** application/JSONLINES

**Formato denso**

Un solo registro en formato denso se puede representar como:

```
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

o bien:

```
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
```

**Formato disperso**

Un solo registro en formato disperso se representa como:

```
{"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }
```

Varios registros se representan como una colección de las representaciones de un solo registro, separadas por caracteres de nueva línea:

```
{"data": {"features": { "keys": [0, 1, 3], "shape": [4], "values": [1, 4, 1] } } }
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

### Formato de solicitud CSV
<a name="cm-csv"></a>

**Tipo de contenido:** text/CSV; label\_size=0

**nota**  
La compatibilidad con CSV no está disponible para máquinas de factorización.

### Formato de solicitud RECORDIO
<a name="cm-recordio"></a>

Tipo de contenido: aplicación/ x-recordio-protobuf

## Uso de la transformación por lotes con algoritmos integrados
<a name="cm-batch"></a>

Mientras se ejecuta la transformación por lotes, se recomienda usar el tipo de respuesta JSONLINES en lugar de JSON, si lo admite el algoritmo. Para ello, ajuste el campo `Accept` en el `CreateTransformJobRequest` en `application/jsonlines`.

Al crear un trabajo de transformación, `SplitType` debe establecerse según el `ContentType` de los datos de entrada. Del mismo modo, dependiendo del campo `Accept` de la `CreateTransformJobRequest`, `AssembleWith` debe establecerse en consecuencia. Utilice la siguiente tabla para configurar estos campos:


| ContentType | Recomendado SplitType | 
| --- | --- | 
| application/x-recordio-protobuf | RecordIO | 
| text/csv | Line | 
| application/jsonlines | Line | 
| application/json | None | 
| application/x-image | None | 
| image/\* | None | 


| Aceptar | Recomendado AssembleWith | 
| --- | --- | 
| application/x-recordio-protobuf | None | 
| application/json | None | 
| application/jsonlines | Line | 

Para obtener más información sobre los formatos de respuesta para algoritmos específicos, consulte lo siguiente:
+ [Formatos de inferencia de DeepAR](deepar-in-formats.md)
+ [Formatos de respuesta de máquinas de factorización](fm-in-formats.md)
+ [Formatos de datos de inferencia de Información IP](ip-insights-inference-data-formats.md)
+ [Formatos de respuesta de k-means](km-in-formats.md)
+ [Formatos de respuesta y solicitud k-NN](kNN-inference-formats.md)
+ [Formatos de respuesta de aprendizaje lineal](LL-in-formats.md)
+ [Formatos de respuesta de NTM](ntm-in-formats.md)
+ [Formato de datos para inferencia de Object2Vec](object2vec-inference-formats.md)
+ [Integraciones de codificador para Object2Vec](object2vec-encoder-embeddings.md)
+ [Formatos de respuesta de PCA](PCA-in-formats.md)
+ [Formatos de respuesta de RCF](rcf-in-formats.md)