

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.

# Capacite y evalúe los DeepRacer modelos de AWS
<a name="create-deepracer-project"></a>

 Cuando su DeepRacer vehículo de AWS circula solo por una vía, captura los estados ambientales con la cámara montada en la parte delantera y toma medidas en respuesta a las observaciones. Su DeepRacer modelo de AWS es una función que asigna las observaciones y las acciones a la recompensa esperada. Entrenar al modelo consiste en encontrar o aprender la función que maximiza la recompensa prevista de manera que el modelo optimizado prescriba qué acciones (pares de velocidad y ángulo de dirección) puede realizar su vehículo para moverse por la pista de principio a fin. 

En la práctica, la función se representa mediante una red neuronal y el entrenamiento de la red implica encontrar las ponderaciones de red óptimas dadas las secuencias de estados medioambientales observados y las acciones de respuesta del vehículo. Los criterios subyacentes óptimos se describen por la función de recompensas del modelo que anima al vehículo a realizar movimientos legales y productivos sin provocar accidentes de tráfico o infracciones. Una función de recompensa sencilla podría devolver una recompensa de 0 si el vehículo está en la pista, -1 si está fuera de la pista y \$11 si alcanza la línea de meta. Con esta función de recompensa, el vehículo se penaliza al salirse de la pista y recibe una recompensa por llegar al destino. Esta puede ser una buena función de recompensa si el tiempo o la velocidad no es un problema.

 Supongamos que le interesa que el vehículo conduzca lo más rápido posible sin salirse de una pista recta. A medida que la velocidad del vehículo aumenta y disminuye, el vehículo puede maniobrar hacia la izquierda o hacia la derecha para evitar obstáculos o para permanecer dentro. Un giro demasiado abierto a velocidad elevada podría provocar que el vehículo se saliera de la pista. Hacer un giro demasiado pequeño podría no ayudar a evitar una colisión contra un obstáculo u otro vehículo. En términos generales, las acciones óptimas serían realizar un giro mayor a una velocidad menor velocidad o maniobrar menos a lo largo de una curva más pronunciada. Para fomentar este comportamiento, su función de recompensa debe asignar una puntuación positiva para recompensar los giros más pequeños a una velocidad más alta y and/or una puntuación negativa para castigar los giros más grandes a una velocidad más alta. Del mismo modo, la función de recompensa puede devolver una recompensa positiva al acelerar por un trayecto más recto a reducir la velocidad cuando se acerca a un obstáculo.

La función de recompensas es una parte importante de su DeepRacer modelo de AWS. Debe proporcionarla cuando entrene su DeepRacer modelo de AWS. El entrenamiento implica episodios repetidos a lo largo de la pista de principio a fin. En un episodio el agente interactúa con la pista para realizar el recorrido de acciones óptimo maximizando la recompensa futura prevista. Al final, el entrenamiento produce un modelo de aprendizaje por refuerzo. Después del entrenamiento, el agente ejecuta la conducción autónoma ejecutando inferencia en el modelo para que realice una acción óptima en cualquier estado dado. Esto se puede hacer en el entorno simulado con un agente virtual o en un entorno real con un agente físico, como un vehículo a DeepRacer escala de AWS. 

 Para entrenar un modelo de aprendizaje de refuerzo en la práctica, debe elegir un algoritmo de aprendizaje. Actualmente, la DeepRacer consola de AWS solo admite los algoritmos de optimización próxima de políticas ([PPO](https://arxiv.org/pdf/1707.06347.pdf)) y soft actor crítico (SAC). A continuación, puede elegir un marco de aprendizaje profundo que admita el algoritmo elegido, a menos que desee escribir uno desde cero. AWS DeepRacer se integra con la SageMaker IA para que algunos marcos populares de aprendizaje profundo, por ejemplo [TensorFlow](https://www.tensorflow.org/), estén disponibles en la DeepRacer consola de AWS. El uso de un marco de trabajo simplifica la configuración y ejecución de trabajos de entrenamiento y le permite centrarse en la creación y mejora de funciones de recompensa específicas de sus problemas. 

 El entrenamiento del modelo de aprendizaje de refuerzo es un proceso iterativo. En primer lugar, resulta complicado definir una función de recompensa que cubra todos los comportamiento importantes de un agente en un entorno a la vez. En segundo lugar, los hiperparámetros se suelen ajustar para garantizar un rendimiento de entrenamiento satisfactorio. Ambos requieren experimentación. Un enfoque prudente es comenzar con una función de recompensa sencilla y luego mejorarla progresivamente. AWS DeepRacer facilita este proceso iterativo al permitirle clonar un modelo entrenado y luego usarlo para iniciar la siguiente ronda de entrenamiento. En cada iteración puede introducir en la función de recompensa uno o varios tratamientos más sofisticados para tratar variables que se hayan pasado por alto con anterioridad o puede ajustar sistemáticamente los hiperparámetros hasta que el resultado converja. 

 Como práctica general en aprendizaje automático, debe evaluar un modelo de aprendizaje por refuerzo para determinar su eficacia antes de implementarlo en un agente físico para ejecutar inferencia en una situación del mundo real. Para conducción autónoma, la evaluación se puede basar en la frecuencia con la que un vehículo permanece en una determinada pista de principio a fin o la rapidez con que puede finalizar el recorrido sin salirse de la pista. La DeepRacer simulación de AWS le permite ejecutar la evaluación y publicar las métricas de rendimiento para compararlas con los modelos entrenados por otros DeepRacer usuarios de AWS en una [tabla de clasificación](deepracer-racing-series.md). 

**Topics**
+ [Comprender los tipos de carreras y habilitar los sensores compatibles con AWS DeepRacer](deepracer-choose-race-type.md)
+ [Entrene y evalúe DeepRacer los modelos de AWS mediante la DeepRacer consola de AWS](deepracer-console-train-evaluate-models.md)
+ [Referencia de funciones de DeepRacer recompensas de AWS](deepracer-reward-function-reference.md)

# Comprender los tipos de carreras y habilitar los sensores compatibles con AWS DeepRacer
<a name="deepracer-choose-race-type"></a>

En AWS DeepRacer League, puede participar en los siguientes tipos de eventos de carreras: 
+ **Contrarreloj**: corra contra el reloj en una pista sin obstáculos e intente obtener el tiempo de vuelta más rápido posible.
+ **Evasión de obstáculos**: corra contra el reloj en una pista con obstáculos fijos e intente obtener el tiempo de vuelta más rápido posible.
+ **Head-to-bot carreras**: compite contra uno o más vehículos en la misma pista y trata de cruzar la línea de meta antes que otros vehículos.

Actualmente, las carreras DeepRacer comunitarias de AWS solo admiten contrarreloj. 

Deberías experimentar con diferentes sensores en tu DeepRacer vehículo de AWS para dotarlo de las capacidades suficientes para observar su entorno en un tipo de carrera determinado. En la siguiente sección, se describen los [sensores DeepRacer compatibles con AWS](#deepracer-how-it-works-autonomous-driving-sensors) que pueden habilitar los tipos compatibles de eventos de carreras autónomas.

**Topics**
+ [Elija sensores para los tipos de DeepRacer carreras de AWS](#deepracer-how-it-works-autonomous-driving-sensors)
+ [Configurar el agente para entrenar DeepRacer modelos de AWS](#deepracer-configure-agent)
+ [Personalice la DeepRacer formación de AWS para las contrarreloj](#deepracer-get-started-training-simple-time-trial)
+ [Adapte la DeepRacer formación de AWS para las carreras de evitación de objetos](#deepracer-get-started-training-object-avoidance)
+ [Personalice el DeepRacer entrenamiento de AWS para head-to-bot las carreras](#deepracer-get-started-training-h2h-racing)

## Elija sensores para los tipos de DeepRacer carreras de AWS
<a name="deepracer-how-it-works-autonomous-driving-sensors"></a>

Su DeepRacer vehículo de AWS viene con una cámara monocular frontal como sensor predeterminado. Puede añadir otra cámara monocular frontal para crear cámaras estéreo frontales o para complementar la cámara monocular o las cámaras estéreo con una unidad LiDAR. 

La siguiente lista resume las capacidades funcionales de los sensores DeepRacer compatibles con AWS, junto con breves cost-and-benefit análisis:

**Cámara frontal**  <a name="term-deepracer-sensor-front-facing-monocular-camera"></a>
 Una cámara frontal monolente puede capturar imágenes del entorno frente al vehículo anfitrión, incluidos los bordes y las formas de la pista. Es el sensor menos caro y es adecuado para manejar las tareas de conducción autónomas más simples, como carreras contrarreloj sin obstáculos en pistas bien marcadas. Con el entrenamiento adecuado, puede esquivar obstáculos estacionarios en lugares fijos en la pista. Sin embargo, la información sobre la ubicación de los obstáculos está incorporada en el modelo entrenado y, como resultado, es probable que el modelo esté sobreajustado y no se generalice a otras colocaciones de obstáculos. Con objetos estacionarios colocados en lugares aleatorios u otros vehículos en movimiento en la pista, es poco probable que el modelo converja.   
En el mundo real, el DeepRacer vehículo de AWS viene con una cámara frontal de un solo objetivo como sensor predeterminado. La cámara tiene una lente gran angular de 120 grados y captura imágenes RGB que luego se convierten en imágenes en escala de grises de 160 x 120 píxeles a 15 fotogramas por segundo (fps). Estas propiedades del sensor se conservan en el simulador para maximizar la posibilidad de que el modelo entrenado se transfiera bien de la simulación al mundo real.

**Cámara estéreo frontal**  <a name="term-deepracer-sensor-front-facing-stereo-cameras"></a>
Una cámara estéreo tiene dos o más objetivos que capturan imágenes con la misma resolución y frecuencia. Las imágenes de ambas lentes se utilizan para determinar la profundidad de los objetos observados. La información de profundidad de una cámara estéreo es valiosa para el vehículo anfitrión para evitar chocar contra los obstáculos u otros vehículos por la parte delantera, especialmente en entornos más dinámicos. Sin embargo, la información de profundidad adicional hace que los entrenamientos converjan más lentamente.   
 En el vehículo DeepRacer físico de AWS, la cámara estéreo de doble objetivo se construye añadiendo otra cámara de objetivo único y montando cada cámara en los lados izquierdo y derecho del vehículo. El DeepRacer software AWS sincroniza las capturas de imágenes de ambas cámaras. Las imágenes capturadas se convierten a escala de grises, se apilan y se introducen en la red neuronal para su inferenciación. El mismo mecanismo se duplica en el simulador con el fin de entrenar el modelo para generalizar bien a un entorno del mundo real.

**Sensor LiDAR**  <a name="term-deepracer-sensor-rear-mount-lidar"></a>
 Un sensor LiDAR utiliza láseres giratorios para enviar pulsos de luz fuera del espectro visible y calcular cuánto tarda cada pulso en volver. La dirección de y la distancia hasta los objetos a los que golpea un pulso específico se registran como un punto en un mapa 3D grande centrado alrededor de la unidad LiDAR.   
Por ejemplo, LiDAR ayuda a detectar puntos ciegos del vehículo anfitrión para evitar colisiones mientras el vehículo cambia de carril. Al combinar LiDAR con cámaras mono o estéreo, permite que el vehículo anfitrión capture suficiente información para tomar las medidas adecuadas. Sin embargo, un sensor LiDAR es más caro en comparación con las cámaras. La red neuronal debe aprender a interpretar los datos LiDAR. Por lo tanto, los entrenamientos tardarán más en converger.   
 En el vehículo DeepRacer físico de AWS, un sensor LiDAR está montado en la parte trasera e inclinado 6 grados hacia abajo. Gira a una velocidad angular de 10 rotaciones por segundo y tiene un rango de 15 cm a 2 m. Puede detectar objetos detrás y a los lados del vehículo anfitrión, así como objetos elevados no obstruidos por las piezas del vehículo en la parte delantera. El ángulo y el alcance se eligen para que la unidad LiDAR sea menos susceptible al ruido ambiental.

 Puede configurar su DeepRacer vehículo de AWS con la siguiente combinación de sensores compatibles: 
+ Solo cámara frontal de un solo objetivo.

  Esta configuración es buena para contrarreloj, así como para esquivar obstáculos con objetos en lugares fijos.
+ Solo cámara estéreo frontal.

  Esta configuración es buena para evitar obstáculos con objetos en ubicaciones fijas o aleatorias. 
+ Cámara frontal de un solo objetivo con LiDAR.

  Esta configuración es adecuada para evitar obstáculos o head-to-bot competir en carreras.
+ Cámara estéreo frontal con LiDAR.

  Esta configuración es buena para evitar obstáculos o head-to-bot competir, pero probablemente no sea la más económica para las contrarreloj.

A medida que agrega más sensores para que su DeepRacer vehículo de AWS pase de las contrarreloj a la evasión de objetos y head-to-bot las carreras, el vehículo recopila más datos sobre el entorno para incorporarlos a la red neuronal subyacente durante el entrenamiento. Esto hace que el entrenamiento sea más difícil porque se necesita que el modelo maneje mayores complejidades. Al final, sus tareas de aprendizaje para entrenar modelos se vuelven más exigentes. 

Para aprender de forma progresiva, primero debe empezar a entrenarse para las contrarreloj antes de pasar a la evitación de objetos y, después, a las head-to-bot carreras. Encontrará recomendaciones más detalladas en la siguiente sección.

## Configurar el agente para entrenar DeepRacer modelos de AWS
<a name="deepracer-configure-agent"></a>

 Para entrenar un modelo de aprendizaje por refuerzo para que el DeepRacer vehículo de AWS compita evitando obstáculos o head-to-bot corriendo, debe configurar el agente con los sensores adecuados. Para pruebas contrarreloj sencillas, puede usar el agente predeterminado configurado con una cámara monolente. Al configurar el agente, puede personalizar el espacio de acción y elegir una topología de red neuronal para que funcione mejor con los sensores seleccionados y cumpla con los requisitos de conducción previstos. Además, puede cambiar la apariencia del agente para facilitar su identificación visual durante el entrenamiento.

Después de configurarlo, la configuración del agente se registra como parte de los metadatos del modelo para el entrenamiento y la evaluación. Para la evaluación, el agente recupera automáticamente la configuración registrada para utilizar los sensores especificados, el espacio de acción y la tecnología de red neuronal.

En esta sección se explican los pasos para configurar un agente en la DeepRacer consola de AWS. 

**Para configurar un DeepRacer agente de AWS en la DeepRacer consola de AWS**

1. Inicie sesión en la [ DeepRacerconsola de AWS](https://console.aws.amazon.com/deepracer).

1. En el panel de navegación principal, seleccione **Garage (Garaje)**.

1. La primera vez que utilice **Garage (Garaje)**, aparecerá el cuadro de diálogo **WELCOME TO THE GARAGE (BIENVENIDO AL GARAJE)** . Elija **>** o **<** consulte la introducción a los distintos sensores compatibles con el DeepRacer vehículo de AWS o seleccione **X** para cerrar el cuadro de diálogo. Puede encontrar esta información introductoria en el panel de ayuda en **Garage (Garaje)**.

1. En la página **Garage (Garaje)** elija **Build new vehicle (Construir un nuevo vehículo)**.

1.  En la página **Mod your own vehicle (Personalice su propio vehículo)** en **Mod specifications (Especificaciones de personalización)**, elija uno o más sensores para probar y aprender la mejor combinación que pueda satisfacer sus tipos de carreras previstos. 

   Para entrenarse para las pruebas contrarreloj de AWS para DeepRacer vehículos, elija **Camera**. Para evitar obstáculos o head-to-bot correr, querrá utilizar otros tipos de sensores. Para elegir **Cámara estéreo**, asegúrese de haber adquirido una cámara adicional de una sola lente. AWS DeepRacer convierte la cámara estéreo en dos cámaras de un solo objetivo. Puede tener una cámara monolente o una cámara estéreo de doble lente en un vehículo. En cualquier caso, puedes añadir un sensor LiDAR al agente si solo quieres que el modelo entrenado sea capaz de detectar y evitar puntos ciegos al evitar obstáculos o al correr. head-to-bot 

1. En la página **Garage (Garaje)** y en **Neural network topologies (Topologías de red neuronal)**, elija una topología de red compatible.

   En general, una red neuronal más profunda (con más capas) es más adecuada para conducir en pistas más complicadas con curvas agudas y numerosos giros, para competir para evitar obstáculos estacionarios o para competir contra otros vehículos en movimiento. Pero resulta más caro entrenar una red neuronal más profunda y el modelo tarda más en converger. Por otro lado, una red menos profunda (con menos capas) cuesta menos y se tarda menos en entrenarla. El modelo entrenado es capaz de manejar condiciones de pista más simples o requisitos de conducción, como contrarreloj en una pista sin obstáculos sin competidores. 

   En concreto, AWS DeepRacer admite CNN de **3 capas o CNN** de **5 capas**. 

1. En la página **Garage (Garaje)** seleccione **Next (Siguiente)** para continuar con la configuración del espacio de acción del agente.

1. En la página **Action space (Espacio de acción)** deje la configuración predeterminada para su primer entrenamiento. Para entrenamientos posteriores, experimente con diferentes ajustes para el ángulo de dirección, la velocidad máxima y sus granularidades. A continuación, elija **Siguiente**.

1. En la página **Colorea tu vehículo para que destaque entre la multitud**, escribe un nombre en **Nombre tuyo DeepRacer** y, a continuación, elige un color para el agente de la lista de **colores del vehículo**. A continuación, seleccione **Submit (Enviar)**. 

1. En la página **Garage (Garaje)** examine la configuración del nuevo agente. Para realizar más modificaciones, elija **Mod vehicle (Personalizar vehículo)** y repita los pasos anteriores comenzando por el **paso 4**. 

Ahora, su agente está listo para entrenar. 

## Personalice la DeepRacer formación de AWS para las contrarreloj
<a name="deepracer-get-started-training-simple-time-trial"></a>

Si es la primera vez que utiliza AWS DeepRacer, debería empezar con una prueba contrarreloj sencilla para familiarizarse con el entrenamiento de los DeepRacer modelos de AWS para que conduzcan su vehículo. De esta manera, obtiene una introducción más suave a los conceptos básicos de función de recompensa, agente, medio ambiente, etc. Su objetivo es entrenar a un modelo para que el vehículo permanezca en la pista y termine una vuelta lo más rápido posible. A continuación, puede implementar el modelo entrenado en su DeepRacer vehículo de AWS para realizar una prueba de conducción en una pista física sin sensores adicionales.

Para preparar un modelo para este escenario, puede elegir el agente predeterminado en **Garage** en la DeepRacer consola de AWS. El agente predeterminado se ha configurado con una sola cámara frontal, un espacio de acción predeterminado y una topología de red neuronal predeterminada. Resulta útil empezar a entrenar un DeepRacer modelo de AWS con el agente predeterminado antes de pasar a otros más sofisticados.

Para entrenar su modelo con el agente predeterminado, siga las recomendaciones que se indican a continuación. 

1. Empiece a entrenar a su modelo con una pista simple de formas más regulares y de giros menos abruptos. Utilice la función de recompensa predeterminada. Y entrene el modelo durante 30 minutos. Una vez completada la tarea de entrenamiento, evalúe su modelo en la misma pista para ver si el agente puede terminar una vuelta.

1. Obtenga más información sobre los [parámetros de la función de recompensa](deepracer-reward-function-input.md). Prosiga el entrenamiento con diferentes incentivos para recompensar al agente para que vaya más rápido. Alargue el tiempo de entrenamiento del siguiente modelo a 1 - 2 horas. Compare el gráfico de recompensas entre el primer entrenamiento y el segundo. Siga experimentando hasta que el gráfico de recompensas deje de mejorar.

1. Lea más sobre el [espacio de acción](deepracer-how-it-works-action-space.md). Entrene el modelo la 3ª vez aumentando la velocidad máxima (por ejemplo, 1 m/s). Para modificar el espacio de acción, debe construir un nuevo agente en **Garage**, cuando tenga la oportunidad de realizar la modificación. Cuando actualice la velocidad máxima de su agente, tenga en cuenta que cuanto mayor sea la velocidad máxima, más rápido podrá el agente completar la pista de evaluación y más rápido su DeepRacer vehículo de AWS podrá terminar una vuelta en una pista física. Sin embargo, una velocidad máxima más alta a menudo significa que el entrenamiento va a tardar más tiempo en converger, porque es más probable que el agente rebase una curva y, por lo tanto, se salga de la pista. Es posible que desee reducir las granularidades para dar al agente más espacios para acelerar o desacelerar y ajustar aún más la función de recompensa de otras maneras para ayudar a que el entrenamiento converja más rápido. Después de que el entrenamiento converja, evalúe el tercer modelo para ver si el tiempo de vuelta mejora. Siga explorando hasta que no haya más mejoras.

1. Elija una pista más complicada y repita el proceso del **paso 1** al **paso 3**. Evalúe su modelo en una pista que sea diferente de la que utilizó para entrenar para ver cómo el modelo puede generalizar diferentes pistas virtuales y [generalizar entornos del mundo real](deepracer-how-it-works-virtual-to-physical.md). 

1. (Opcional) Experimente con diferentes valores de los [hiperparámetros](deepracer-console-train-evaluate-models.md#deepracer-iteratively-adjust-hyperparameters) para mejorar el proceso de entrenamiento y repita el proceso del **paso 1** al **paso 3**.

1. (Opcional) Examine y analice los DeepRacer registros de AWS. Para ver un código de muestra que puede utilizar para analizar los registros, consulte [https://github.com/aws-samples/aws-deepracer-workshops/tree/master/log-analysis](https://github.com/aws-samples/aws-deepracer-workshops/tree/master/log-analysis).

## Adapte la DeepRacer formación de AWS para las carreras de evitación de objetos
<a name="deepracer-get-started-training-object-avoidance"></a>

 

Después de familiarizarse con las contrarreloj y haber entrenado algunos modelos convergentes, pase al siguiente desafío, algo más exigente: esquivar obstáculos. Aquí, su objetivo es entrenar a un modelo que pueda completar una vuelta lo más rápido posible sin salir de la pista, evitando al mismo tiempo chocar contra los objetos colocados en la pista. Obviamente, este es un problema con un aprendizaje más complicado para el agente, y el entrenamiento tarda más en converger. 

La DeepRacer consola de AWS admite dos tipos de entrenamiento para evitar obstáculos: los obstáculos se pueden colocar en ubicaciones fijas o aleatorias a lo largo de la pista. Con ubicaciones fijas, los obstáculos permanecen fijos en el mismo lugar durante toda la tarea de entrenamiento. Con ubicaciones aleatorias, los obstáculos cambian sus respectivos lugares al azar de un episodio a otro. 

Es más fácil para los entrenamientos converger a la hora de evitar obstáculos de ubicación fija porque el sistema tiene menos grados de libertad. Sin embargo, los modelos pueden sobreajustarse cuando la información de ubicación está integrada en los modelos entrenados. Como resultado, los modelos pueden estar sobrecargados y pueden no generalizarse bien. A la hora de esquivar obstáculos posicionados aleatoriamente, es más difícil que los entrenamientos converjan porque el agente debe seguir aprendiendo a evitar chocar contra obstáculos en lugares que no ha visto antes. Sin embargo, los modelos entrenados con esta opción tienden a generalizarse mejor y transferirse bien a las carreras del mundo real. Para empezar, coloque obstáculos en ubicaciones fijas, familiarícese con los comportamientos y, a continuación, aborde las ubicaciones aleatorias. 

En el DeepRacer simulador de AWS, los obstáculos son cajas en forma de cubo con las mismas dimensiones (9.5 pulgadas (largo) x 15.25 pulgadas (ancho) x 10/5 pulgadas (alto)) que la caja del paquete del vehículo de AWS. DeepRacer Esto hace que sea más fácil transferir el modelo entrenado del simulador al mundo real si coloca la caja de embalaje como un obstáculo en la pista física.

Para experimentar con la esquiva de obstáculos, siga la práctica recomendada que se describe en los pasos siguientes:

1. Utilice el agente predeterminado o experimente con nuevos sensores y espacios de acción personalizando un agente existente o creando uno nuevo. Debe limitar la velocidad máxima a menos de 0,8 m/s y la granularidad de la velocidad a 1 o 2 niveles.

   Comience a entrenar un modelo durante aproximadamente 3 horas con 2 objetos en ubicaciones fijas. Utilice la función de compensación de ejemplo y entrene al modelo en la pista en la que vaya a correr o en una pista similar. El circuito **AWS DeepRacer Smile Speedway (intermedio)** es sencillo, lo que lo convierte en una buena opción para prepararse para las carreras de cumbre. A continuación, evalúe el modelo en la misma pista con el mismo número de obstáculos. Vea cómo converge la recompensa total esperada, en caso de que sea posible. 

1. Obtenga más información sobre los [parámetros de la función de recompensa](deepracer-reward-function-input.md). Experimente con variaciones de su función de recompensa. Aumente el número de obstáculos a 4. Capacite al agente para ver si el entrenamiento converge en la misma cantidad de tiempo de entrenamiento. Si no lo hace, vuelva a ajustar su función de recompensa, reduzca la velocidad máxima o reduzca el número de obstáculos, y vuelva a entrenar al agente. Repita la experimentación hasta que ya no haya mejoras relevantes. 

1. Ahora, pasemos al entrenamiento esquivando obstáculos en lugares aleatorios. Deberá configurar el agente con sensores adicionales, que están disponibles en **Garage** en la DeepRacer consola de AWS. Puede usar una cámara estéreo. También puede combinar una unidad LiDAR con una cámara monolente o una cámara estéreo, pero debería esperar un tiempo de entrenamiento más largo. Configure el espacio de acción con una velocidad máxima relativamente baja (por ejemplo 2 m/s) para que el entrenamiento converja más rápidamente. Para la arquitectura de red, utilice una red neuronal superficial, que resulta suficiente para esquivar obstáculos.

1. Comience a entrenar durante 4 horas el nuevo agente para esquivar obstáculos con 4 objetos colocados aleatoriamente en una pista simple. Luego evalúe su modelo en la misma pista para ver si puede terminar vueltas con obstáculos posicionados aleatoriamente. Si no es así, es posible que desee ajustar su función de recompensa, probar diferentes sensores y tener más tiempo de entrenamiento. Como otro consejo, puede intentar clonar un modelo ya existente para continuar el entrenamiento y aprovechar la experiencia adquirida previamente. 

1. (Opcional) Elija una velocidad máxima más alta para el espacio de acción o coloque más obstáculos aleatoriamente a lo largo de la pista. Experimente con diferentes combinaciones de sensores y ajuste las funciones de recompensa y los valores de hiperparámetros. Experimente con la topología de red **CNN de 5 capas**. Luego, vuelva a entrenar el modelo para determinar cómo afectan a la convergencia del entrenamiento. 

## Personalice el DeepRacer entrenamiento de AWS para head-to-bot las carreras
<a name="deepracer-get-started-training-h2h-racing"></a>

Tras realizar un entrenamiento para evitar obstáculos, ya estás preparado para afrontar el siguiente nivel de desafío: los modelos de entrenamiento para head-to-bot las carreras. A diferencia de los eventos para evitar obstáculos, head-to-bot las carreras tienen un entorno dinámico con vehículos en movimiento. Su objetivo es entrenar modelos para su DeepRacer vehículo de AWS para que compitan contra otros vehículos en movimiento y llegar primero a la línea de meta sin salirse de la pista ni chocar contra ningún otro vehículo. En la DeepRacer consola de AWS, puede entrenar un modelo de head-to-bot carreras haciendo que su agente compita contra 1 a 4 vehículos robot. En términos generales, usted debe tener más obstáculos colocados en una pista más larga.

Cada vehículo robot sigue un camino predefinido a velocidad constante. Puede habilitarlo para cambiar de carril o permanecer en su carril inicial. De forma similar al entrenamiento para esquivar obstáculos, puede tener los vehículos robot distribuidos uniformemente por la pista en ambos carriles. La consola le permite tener hasta 4 vehículos bot en la pista. Tener más vehículos de la competencia en la pista proporciona al agente de aprendizaje más oportunidades para encontrar situaciones más variadas con los otros vehículos. De esta manera, aprende más en una tarea de entrenamiento y el agente aprende más rápido. Sin embargo, es probable que cada entrenamiento tarde más tiempo en converger. 

Para entrenar a un agente con vehículos robot, debe establecer la velocidad máxima del espacio de acción del agente como más alta que la velocidad (constante) de los vehículos robot para que el agente tenga más oportunidades de paso durante el entrenamiento. Como buen punto de partida, deberías fijar la velocidad máxima del agente en 0,8 m/s y la velocidad de movimiento del vehículo robot en 0,4 m/s. Si habilita a los robots para cambiar de carril, el entrenamiento se vuelve más desafiante porque el agente debe aprender no sólo a evitar chocar contra un vehículo en movimiento delante de él en el mismo carril, sino también cómo evitar chocar contra otro vehículo en movimiento delante de él en el otro carril. Puede configurar los robots para cambiar de carril a intervalos aleatorios. La duración de un intervalo se selecciona al azar a partir de un rango de tiempo (por ejemplo de 1 s a 5 s) que usted especifica antes de iniciar el trabajo de entrenamiento. Este comportamiento al cambiar de carril es más parecido al de las head-to-bot carreras del mundo real, y el agente entrenado debería generar mejor comportamiento. Sin embargo, se tarda más tiempo en entrenar al modelo para converger. 

Sigue estos pasos sugeridos para repetir tu entrenamiento de cara a las carreras: head-to-bot 

1. En **Garage** of the AWS DeepRacer console, cree un nuevo agente de entrenamiento configurado con cámaras estéreo y una unidad LiDAR. Es posible entrenar un modelo relativamente bueno usando solo una cámara estéreo contra vehículos robot. LiDAR ayuda a reducir los puntos ciegos cuando el agente cambia de carril. No establezca una velocidad máxima demasiado elevada. Un buen punto de partida es 1 m/s.

1. Para entrenarte para head-to-bot las carreras, comienza con dos vehículos robot. Establezca la velocidad de movimiento del bot por debajo de la velocidad máxima de su agente (por ejemplo, 0,5 m/s si la velocidad máxima del agente es de 1 m/s). Deshabilite la opción de cambio de carril y, a continuación, elija el agente de entrenamiento que acaba de crear. Utilice uno de los ejemplos de funciones de recompensa o realice las modificaciones mínimas necesarias, y luego entrene durante 3 horas. Use la pista en la que va a competir o una pista similar. El circuito **AWS DeepRacer Smile Speedway (intermedio)** es sencillo, lo que lo convierte en una buena opción para prepararse para las carreras de cumbre. Una vez completado el entrenamiento, evalúe el modelo entrenado en la misma pista. 

1. Para tareas más desafiantes, clone su modelo entrenado para crear un segundo modelo head-to-bot de carreras. Proceda a experimentar con más vehículos robot o active las opciones de cambio de carril. Comience con operaciones de cambio de carril lento a intervalos aleatorios de más de 2 segundos. Es posible que también desee experimentar con funciones de recompensa personalizadas. En general, su lógica de función de recompensa personalizada puede ser similar a la de esquivar obstáculos, si no tiene en cuenta el equilibrio entre superar a otros vehículos y mantenerse en la pista. Dependiendo de lo bueno que sea su modelo anterior, es posible que necesite entrenar otras 3 a 6 horas. Evalúe los modelos y vea cómo funciona el modelo.

# Entrene y evalúe DeepRacer los modelos de AWS mediante la DeepRacer consola de AWS
<a name="deepracer-console-train-evaluate-models"></a>

 Para entrenar un modelo de aprendizaje por refuerzo, puede utilizar la DeepRacer consola de AWS. En la consola, cree un trabajo de entrenamiento, elija un marco compatible y un algoritmo disponible, añada una función de recompensa y configure los ajustes de entrenamiento. También puede ver el procedimiento de entrenamiento en un simulador. Puede encontrar las step-by-step instrucciones en[Entrene su primer DeepRacer modelo de AWS](deepracer-get-started-training-model.md). 

En esta sección se explica cómo entrenar y evaluar un DeepRacer modelo de AWS. También se muestra cómo crear y mejorar una función de recompensa, cómo un espacio de acción afecta al rendimiento del modelo y cómo afectan los hiperparámetros al rendimiento del entrenamiento. Asimismo, puede aprender a clonar un modelo de entrenamiento para ampliar una sesión de entrenamiento, cómo utilizar el simulador para evaluar el rendimiento del entrenamiento y cómo abordar algunos de los retos que plantea el paso de la simulación a la vida real. 

**Topics**
+ [Creación de su función de recompensa](#deepracer-train-models-define-reward-function)
+ [Exploración del espacio de acción para entrenar un modelo sólido](#deepracer-define-action-space-for-training)
+ [Ajuste sistemático de hiperparámetros](#deepracer-iteratively-adjust-hyperparameters)
+ [Examine el progreso del trabajo DeepRacer de formación de AWS](#deepracer-examine-training-progress)
+ [Clonación de un modelo entrenado para comenzar un nuevo paso de entrenamiento](#deepracer-clone-trained-model)
+ [Evalúe DeepRacer los modelos de AWS en simulaciones](#deepracer-evaluate-models-in-simulator)
+ [Optimice los DeepRacer modelos de AWS de entrenamiento para entornos reales](#deepracer-evaluate-model-test-approaches)

## Creación de su función de recompensa
<a name="deepracer-train-models-define-reward-function"></a>

Una [función de recompensa](deepracer-reward-function-reference.md) describe la retroalimentación inmediata (como puntuación de recompensa o penalización) cuando su DeepRacer vehículo de AWS se mueve de una posición en la pista a otra nueva. El objetivo de la función es fomentar que el vehículo se mueva por la pista para llegar rápidamente a un destino sin sufrir accidentes ni cometer infracciones. Si el movimiento que realiza el vehículo es deseable, se obtiene una puntuación más alta por la acción o el estado de destino. Si, por el contrario, el movimiento no está permitido o es innecesario, la puntuación obtenida es más baja. Al entrenar un DeepRacer modelo de AWS, la función de recompensa es la única parte específica de la aplicación.

Por lo general, la función de recompensa se diseña para que sirva como plan de incentivos. Según la estrategia de incentivos que se diseñe, el comportamiento del vehículo será diferente. Para que el vehículo vaya más rápido, la función debe recompensar que el vehículo siga la pista. Por otra parte, la función tiene que sancionar al vehículo cuando este tarda demasiado en finalizar una vuelta o se sale de la pista. Para evitar un patrón de conducción en zigzag, la función puede premiar que el vehículo se mueva con menos vaivenes cuando está en las rectas de la pista. La función de recompensa puede puntuar positivamente que el vehículo cumpla determinados hitos, medidos por [`waypoints`](deepracer-reward-function-input.md). Esto puede compensar las esperas o conducir en la dirección equivocada. También es probable que cambie la función de recompensa para tener en cuenta las condiciones de la pista. Sin embargo, cuanta más información específica del entorno tenga en cuenta la función, más probable será que el modelo esté excesivamente especializado y sea menos general. Para que la aplicación de su modelo sea más general, puede explorar el [espacio de acción](#deepracer-define-action-space-for-training).

Si un plan de incentivos no se sopesa con cuidado, es posible que [se obtengan consecuencias inesperadas no deseadas](https://en.wikipedia.org/wiki/Cobra_effect). Esto se debe a que la valoración inmediata es una condición necesaria pero no suficiente para el aprendizaje por refuerzo. En sí misma, una recompensa individual inmediata no puede determinar si el movimiento es deseable o no. En una posición determinada, un movimiento puede obtener una puntuación alta, mientras que el movimiento siguiente puede salirse de la pista y obtener una mala puntuación. En tal caso, el vehículo debe evitar el movimiento de alta puntuación en dicha posición. Solo cuando todos los movimientos posteriores realizados a partir de una determinada posición obtengan una puntuación de promedio alto, deberá considerarse deseable el movimiento a la siguiente posición. Las valoraciones futuras se descuentan a una velocidad que permite incluir solo un pequeño número de movimientos o posiciones en el cálculo promedio de recompensa.

Una buena práctica para crear una [función de recompensa](deepracer-reward-function-reference.md) consiste en comenzar con una función sencilla que cubra situaciones básicas. Puede mejorar la función para que incluya más acciones. Veamos ahora algunas funciones de recompensa sencillas.

**Topics**
+ [Ejemplos de funciones de recompensa sencillas](#deepracer-reward-function-simple-examples)
+ [Mejora para su función de recompensa](#deepracer-iteratively-enhance-reward-functions)

### Ejemplos de funciones de recompensa sencillas
<a name="deepracer-reward-function-simple-examples"></a>

Podemos comenzar a crear la función de recompensa abordando primero la situación más básica. Se trata de conducir en una pista recta, desde principio a fin, sin salirse de la vía. En este caso, la lógica de la función de recompensa depende solo de `on_track` y `progress`. Como ensayo, puede comenzar con la lógica siguiente:

```
def reward_function(params):
    if not params["all_wheels_on_track"]:
        reward = -1
    else if params["progress"] == 1 :
        reward = 10
    return reward
```

Con esta lógica, se penaliza al agente cuando este se sale de la pista y se le premia cuando llega a la línea de meta. Es una lógica razonable para lograr el objetivo marcado. Sin embargo, el agente deambula libremente entre el punto de inicio y la línea de meta, y esto incluye la posibilidad de circular marcha atrás en la pista. Con ello vemos que el entrenamiento no solo puede tardar mucho tiempo en completarse sino que, además, el modelo entrenado tendría una conducción menos eficiente cuando se implementase en el vehículo real. 

En la práctica, un agente aprende de forma más eficaz si puede hacerlo bit-by-bit a lo largo de la formación. Esto implica que una función de recompensa debe dar recompensas menores paso a paso a lo largo de la pista. Para que el agente circule en la pista recta, podemos mejorar la función de recompensa del siguiente modo: 

```
def reward_function(params):
    if not params["all_wheels_on_track"]:
        reward = -1
    else:
        reward = params["progress"]
    return reward
```

 Con esta función, el agente consigue mayor recompensa cuando más se acerca a la línea de meta. Esto debería reducir o eliminar los ensayos improductivos de conducir marcha atrás. En general, queremos que la función de recompensa distribuya la recompensa de forma más uniforme en el espacio de acción. Crear una función de recompensa que sea efectiva puede suponer un verdadero desafío. Debe comenzar por una función de recompensa que sea sencilla y luego irla mejorando progresivamente. A través de la experimentación sistemática, la función puede ir adquiriendo mayor solidez y eficacia. 

### Mejora para su función de recompensa
<a name="deepracer-iteratively-enhance-reward-functions"></a>

Una vez que haya entrenado correctamente su DeepRacer modelo de AWS para que sea sencillo y recto, el DeepRacer vehículo de AWS (virtual o físico) podrá conducirse solo sin salirse de la pista. Si deja que el vehículo circule en una pista en bucle, no se mantendrá en la pista. La función de recompensa ha pasado por alto las acciones para hacer giros para seguir la pista. 

Para que el vehículo pueda ejecutar estas acciones, tendrá que mejorar la función de recompensa. La función tiene que recompensar al agente cuanto este toma una curva que está permitida y penalizarlo si toma una curva no permitida. Después ya estará listo para comenzar otra ronda de entrenamiento. Para aprovechar el entrenamiento anterior, puede comenzar el nuevo entrenamiento clonando el modelo entrenado anteriormente y, de esta forma, transmitir los conocimientos aprendidos con anterioridad. Puede seguir este patrón para añadir gradualmente más funciones a la función de recompensa para que su DeepRacer vehículo de AWS pueda conducir en entornos cada vez más complejos.

Para obtener más funciones de recompensa avanzadas, consulte los siguientes ejemplos:
+ [Ejemplo 1: seguir la línea central en contrarreloj](deepracer-reward-function-examples.md#deepracer-reward-function-example-0)
+ [Ejemplo 2: permanecer dentro de los límites en contrarreloj](deepracer-reward-function-examples.md#deepracer-reward-function-example-1)
+ [Ejemplo 3: evitar zigzaguear en las contrarreloj](deepracer-reward-function-examples.md#deepracer-reward-function-example-2)
+ [Ejemplo 4: permanecer en un carril sin chocar con obstáculos estacionarios ni vehículos en movimiento](deepracer-reward-function-examples.md#deepracer-reward-function-example-3)

## Exploración del espacio de acción para entrenar un modelo sólido
<a name="deepracer-define-action-space-for-training"></a>

Por regla general, entrene el modelo para que sea lo más sólido posible para que pueda aplicarlo a tantos entornos como pueda. Por modelo sólido se entiende un modelo que se puede aplicar a una amplia gama de formas y condiciones de pista. En términos generales, un modelo sólido no es "inteligente" porque su función de recompensa no tiene la capacidad para contener conocimientos explícitos sobre el entorno. De lo contrario, el modelo probablemente solo se pueda aplicar a un entorno similar al del entrenamiento. 

incorporar explícitamente información específica del entorno a la función de recompensa equivale a ingeniería de funciones. La ingeniería de funciones ayuda a reducir el tiempo de entrenamiento y puede resultar útil en soluciones que se crean específicamente para un entorno determinado. Sin embargo, para entrenar un modelo que se pueda aplicar en general, debe abstenerse de intentar introducir una gran cantidad de ingeniería de funciones. 

Por ejemplo, cuando entrene un modelo en una pista circular, no puede esperar obtener un modelo entrenado que se pueda aplicar a cualquier pista que no sea circular si tiene tales propiedades geométricas incorporadas explícitamente en la función de recompensa. 

¿Qué puede hacer para entrenar un modelo que sea lo más sólido posible y que al mismo tiempo tenga una función de recompensa que sea también lo más sencilla posible? Una solución es explorar el espacio de acción que abarca las acciones que puede ejecutar su agente. Otra solución consiste en experimentar con [hiperparámetros](#deepracer-iteratively-adjust-hyperparameters) del algoritmo de entrenamiento subyacente. A menudo, usará ambas soluciones. Aquí, nos centramos en cómo explorar el espacio de acción para entrenar un modelo robusto para su DeepRacer vehículo de AWS.

Al entrenar un DeepRacer modelo de AWS, una acción (`a`) es una combinación de velocidad (`t`metros por segundo) y ángulo de giro (`s`en grados). El espacio de acción del agente define los intervalos de velocidad y el ángulo de dirección el agente puede tomar. Para un espacio de acción discreto con un número `m` de velocidades `(v1, .., vn)` y un número `n` de ángulos de dirección `(s1, .., sm)`, existen `m*n` posibles acciones en el espacio de acción: 

```
a1:           (v1, s1)
...
an:           (v1, sn)

...
a(i-1)*n+j:   (vi, sj)
...

a(m-1)*n+1:   (vm, s1)
...
am*n:         (vm, sn)
```

Los valores reales de `(vi, sj)` dependen de los intervalos de `vmax` y `|smax|`, y no se distribuyen de manera uniforme. 

Cada vez que comience a entrenar o iterar su DeepRacer modelo de AWS `n``m`, `vmax` primero debe especificar los valores predeterminados `|smax|` o aceptar su uso. En función de su elección, el DeepRacer servicio de AWS genera las acciones disponibles que su agente puede elegir durante la formación. Las acciones generadas no se distribuyen de manera uniforme por el espacio de acción. 

En general, cuanto mayor sea el número de acciones y los intervalos de acción, su agente tendrá más espacio u opciones para reaccionar a más condiciones de pista diferentes, como una pista con curvas y ángulos de giro o direcciones irregulares. Cuantas más acciones tenga el agente a su disposición, más fácilmente podrá gestionar las variaciones de pista. Como resultado, puede esperar que el modelo entrenado se aplique de forma más amplia, incluso cuando se utiliza una sencilla función de recompensa. 

Por ejemplo, su agente puede aprender rápidamente a circular por pistas rectas mediante un espacio de acción general con un número pequeño de velocidades y ángulos de dirección. En una pista con curvas, este espacio de acción general probablemente hará que el agente se exceda y se salga de la pista al girar. Esto se debe a que no hay suficientes opciones a su disposición para ajustar su velocidad o dirección. Aumente el número de velocidades o el número de ángulos de dirección o ambos. El agente debe ser más capaz de maniobrar en las curvas y mantenerse en la pista. Del mismo modo, si su agente se desplaza en zigzag, puede intentar aumentar el número de intervalos de dirección para reducir los giros drásticos en cualquier paso determinado.

Cuando el espacio de acción es demasiado grande, el rendimiento del entrenamiento puede verse afectado, ya que tarda más tiempo en explorar el espacio de acción. Asegúrese de equilibrar los beneficios de la capacidad de aplicación general de un modelo con los requisitos de rendimiento del entrenamiento. Esta optimización requiere una experimentación sistemática.

## Ajuste sistemático de hiperparámetros
<a name="deepracer-iteratively-adjust-hyperparameters"></a>

Una forma de mejorar el rendimiento de su modelo es poner en práctica un proceso de entrenamiento mejor o más efectivo. Por ejemplo, para obtener un modelo sólido, el entrenamiento tiene que proporcionar a su agente un muestreo distribuido de forma más o menos uniforme en el espacio de acción del agente. Para ello se necesita una combinación de exploración y explotación adecuada. Entre las variables que afectan a esta combinación figuran la cantidad de datos de entrenamiento usados (`number of episodes between each training` y `batch size`), la rapidez de aprendizaje del agente (`learning rate`), la parte de exploración (`entropy`). Para que el entrenamiento sea práctico, puede interesarle acelerar el proceso de aprendizaje. Las variables que afectan a este proceso son `learning rate`, `batch size`, `number of epochs` y `discount factor`.

Las variables que afectan al proceso de entrenamiento se conocen como hiperparámetros de entrenamiento. Estos atributos de algoritmo no son propiedades del modelo subyacente. Desgraciadamente, los hiperparámetros son empíricos. Sus valores óptimos no se conocen para todos los efectos prácticos y requieren una experimentación sistemática para realizar deducciones. 

Antes de analizar los hiperparámetros que se pueden ajustar para ajustar el rendimiento del entrenamiento de su DeepRacer modelo de AWS, definamos la siguiente terminología.

Punto de datos  
Un punto de datos, también conocido como una *experiencia*, es una tupla de (*s, a, r, s'*), donde *s* significa una observación o estado capturado por la cámara, *a* se utiliza para una acción realizada por el vehículo, *r* se refiere a la recompensa esperada a la que lleva dicha acción y *s'* se utiliza para la nueva observación después de la acción. 

Episodio  
Un episodio es un período en el que el vehículo comienza desde un determinado punto de partida y acaba completando la pista o saliéndose de ella. Contiene una secuencia de experiencias. La longitud puede variar en función del episodio. 

Búfer de experiencia  
Un búfer de experiencia consiste en una serie de puntos de datos ordenados recopilados durante un número fijo de episodios de diferentes longitudes durante el entrenamiento. En el caso de AWS DeepRacer, corresponde a las imágenes capturadas por la cámara montada en su DeepRacer vehículo de AWS y a las acciones realizadas por el vehículo, y sirve como fuente de la que se extraen los datos para actualizar las redes neuronales subyacentes (políticas y valores).

Lote  
Un lote es una lista ordenada de experiencias que representa una parte de la simulación a lo largo de un periodo de tiempo y que se utiliza para actualizar las ponderaciones de red de la política. Se trata de un subconjunto del búfer de experiencia. 

Datos de entrenamiento  
Los datos de entrenamiento son un conjunto de lotes muestreados al azar de un búfer de experiencia y utilizados para el entrenamiento de ponderaciones de red de política.




**Hiperparámetros algorítmicos y sus efectos**  

| Hiperparámetros | Description (Descripción) | 
| --- | --- | 
|  **Tamaño del lote de descenso de gradientes**   | El número de experiencias del vehículo recientes muestreadas al azar de un búfer de experiencia que se utiliza para actualizar las ponderaciones de red neuronal de aprendizaje profundo subyacentes. El muestreo aleatorio ayuda a reducir las correlaciones inherentes a los datos de entrada. Utilice un tamaño de lote más grande para fomentar actualizaciones más estables y sin obstáculos de las ponderaciones de red neuronal; no obstante, tenga en cuenta que es posible que el entrenamiento se alargue o se ralentice.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/deepracer-console-train-evaluate-models.html) | 
|  **Número de fechas de inicio**  | El número de pases a través de los datos de entrenamiento necesarios para actualizar las ponderaciones de redes neuronales durante el descenso de gradientes. Los datos de entrenamiento corresponden a muestras aleatorias del búfer de experiencia. Utilice un mayor número de fechas de inicio si desea fomentar actualizaciones más estables, pero tenga en cuenta que el entrenamiento será más lento. Cuando el tamaño del lote es pequeño, puede utilizar un menor número de fechas de inicio[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/deepracer-console-train-evaluate-models.html) | 
|  **Tasa de aprendizaje**  |  En cada actualización, una parte de la nueva ponderación puede provenir del descenso (o ascenso) de gradientes, mientras que el resto puede provenir del valor de ponderación existente. La tasa de aprendizaje controla el grado de contribución de la actualización del descenso (o ascenso) de gradientes a las ponderaciones de red. Utilice un mayor índice de aprendizaje si desea incluir más contribuciones de descenso de gradientes para un entrenamiento más rápido, aunque debe tener en cuenta la posibilidad de que la recompensa esperada no se consiga si el índice de aprendizaje es demasiado elevado.  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/deepracer-console-train-evaluate-models.html)  | 
| Entropy |  Grado de incertidumbre que se utiliza para determinar cuándo se debe agregar aleatoriedad a la distribución de política. La incertidumbre adicional ayuda al DeepRacer vehículo de AWS a explorar el espacio de acción de manera más amplia. Un valor de entropía más alto hará que el vehículo explore el espacio de acción con más detalle. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/deepracer-console-train-evaluate-models.html)  | 
| Discount factor (Factor de descuento) |  Un factor sirve para especificar en qué grado contribuyen las recompensas futuras a la recompensa esperada. Cuanto más elevado sea el valor del **factor de descuento**, más contribuciones valorará el vehículo para hacer un movimiento y más lento será el entrenamiento. Si el factor de descuento es de 0,9, el vehículo tendrá en cuenta las recompensas de alrededor de 10 pasos futuros para hacer un movimiento. Si el factor de descuento es de 0,999, el vehículo considerará descuentos de alrededor de 1000 pasos futuros para hacer un movimiento. Los valores recomendados para el factor de descuento son 0,99, 0,999 y 0,9999. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/deepracer-console-train-evaluate-models.html)  | 
| Loss type (Tipo de pérdida) |  Tipo de la función objetivo utilizada para utilizar las ponderaciones de red. Un buen algoritmo de entrenamiento debería hacer cambios incrementales en la estrategia del agente para que pase gradualmente de realizar acciones aleatorias a realizar acciones estratégicas para mejorar la recompensa. Pero si hace un cambio demasiado grande, entonces el entrenamiento se vuelve inestable y el agente termina por no aprender. Los tipos [https://en.wikipedia.org/wiki/Huber_loss](https://en.wikipedia.org/wiki/Huber_loss) y [https://en.wikipedia.org/wiki/Mean_squared_error](https://en.wikipedia.org/wiki/Mean_squared_error) se comportan de forma similar para pequeñas actualizaciones. Pero, a medida que las actualizaciones se hacen más grandes, **Huber loss (Pérdida de Huber)** realiza incrementos más pequeños en comparación con **Mean squared error loss (Pérdida de error cuadrático medio)**. Si tiene problemas de convergencia, utilice el tipo **Huber loss (Pérdida de Huber)**. Cuando la convergencia es buena y desea entrenar más rápido, utilice el tipo **Mean squared error loss (Pérdida de error cuadrático medio)**. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/deepracer-console-train-evaluate-models.html)  | 
| Number of experience episodes between each policy-updating iteration (Número de episodios de experiencia entre cada iteración de actualización de política) | Tamaño del búfer de experiencia del que se extraen los datos de entrenamiento para las ponderaciones de red de la política de aprendizaje. Un episodio de experiencia es un período en el que el agente comienza desde un punto de partida determinado y termina completando la pista o saliéndose de la pista. Se compone de una secuencia de experiencias. La longitud puede variar en función del episodio. Para problemas de aprendizaje por refuerzo sencillos, puede bastar con un pequeño búfer de experiencia y el aprendizaje es rápido. Si los problemas son más complejos y tienen más máximos locales, se necesitará un búfer de experiencia más grande para proporcionar más puntos de datos sin correlacionar. En este caso, el entrenamiento es más lento pero más estable. Los valores recomendados son 10, 20 y 40.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/deepracer-console-train-evaluate-models.html) | 

## Examine el progreso del trabajo DeepRacer de formación de AWS
<a name="deepracer-examine-training-progress"></a>

Después de iniciar el trabajo de entrenamiento, puede examinar las métricas de entrenamiento de recompensas y lo que se ha completado la pista por episodio para determinar el rendimiento del trabajo de entrenamiento del modelo. En la DeepRacer consola de AWS, las métricas se muestran en el **gráfico de recompensas**, como se muestra en la siguiente ilustración.

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/best-model-bar-reward-graph2.png)


Puede optar por ver la recompensa ganada por episodio, la recompensa media por iteración, el progreso por episodio, el progreso medio por iteración o cualquier combinación de ellos. Para ello, cambie los conmutadores **Reward (Episode, Average) [Recompensa (Episodio, media)]** o **Progress (Episode, Average) [Progreso (Episodio, media)]** en la parte inferior del **Reward graph (Gráfico de recompensa)**. La recompensa y el progreso por episodio se muestran como gráficos de dispersión en colores diferentes. La recompensa media y la finalización de pista se muestran mediante gráficos de líneas y comienzan después de la primera iteración. 

 El rango de recompensas se muestra en el lado izquierdo del gráfico y el rango de progreso (0-100) está en el lado derecho. Para leer el valor exacto de una métrica de entrenamiento, mueva el ratón cerca del punto de datos en el gráfico. 

Los gráficos se actualizan automáticamente cada 10 segundos mientras el entrenamiento está en curso. Puede elegir el botón de actualización para actualizar manualmente la visualización de métricas.

Un trabajo de entrenamiento es bueno si la recompensa media y la finalización de pista muestran tendencias que convergen. En concreto, es probable que el modelo haya convergido si el progreso por episodio alcanza continuamente el 100 % y las recompensas se estabilizan De lo contrario, clone el modelo y vuelva a entrenarlo.

## Clonación de un modelo entrenado para comenzar un nuevo paso de entrenamiento
<a name="deepracer-clone-trained-model"></a>

Si clona un modelo entrenado previamente para que sea el punto de partida de una nueva ronda de entrenamiento, puede mejorar la eficacia del entrenamiento. Para ello, modifique los hiperparámetros para utilizar el conocimiento ya aprendido. 

En esta sección, aprenderá a clonar un modelo entrenado mediante la DeepRacer consola de AWS.

**Para iterar el entrenamiento del modelo de aprendizaje por refuerzo mediante la consola de AWS DeepRacer**

1. Inicie sesión en la DeepRacer consola de AWS si aún no lo ha hecho.

1. En la página **Models (Modelos)**, elija un modelo entrenado y, a continuación, elija **Clone (Clonar)** en la lista de menú desplegable **Action (Acción)**.

1. En **Model details (Detalles de modelo)**, haga lo siguiente:

   1. Escriba `RL_model_1` en **Model name (Nombre de modelo)**, si no desea que se genere un nombre para el modelo clonado.

   1. Si lo desea, proporcione una descripción del to-be-cloned modelo en **Descripción del modelo (opcional)**.

1. En **Simulación de entorno**, elija otra opción de pista.

1. En **Función de recompensa**, elija uno de los ejemplos de recompensa disponibles. Modifique la función de recompensa. Por ejemplo, considere la dirección. 

1. Expanda la **configuración del algoritmo** y pruebe otras opciones. Por ejemplo, cambie el valor del **tamaño de lote del descenso de gradiente** de 32 a 64 o aumente el **Learning rate (Tasa de aprendizaje)** para acelerar el entrenamiento. 

1. Experimente con distintas opciones de las **Stop conditions (Condiciones de detención)**.

1. Elija **Start training (Comenzar entrenamiento)** para empezar una nueva ronda de entrenamiento.

Al igual que con el entrenamiento de un modelo de aprendizaje automático sólido en general, es importante que lleve a cabo una experimentación sistemática para obtener la mejor solución. 

## Evalúe DeepRacer los modelos de AWS en simulaciones
<a name="deepracer-evaluate-models-in-simulator"></a>

Evaluar un modelo consiste en probar el rendimiento de un modelo entrenado. En AWS DeepRacer, la métrica de rendimiento estándar es el tiempo medio al terminar tres vueltas consecutivas. Con esta métrica, de los dos modelos, uno es mejor que el otro si puede hacer que el agente vaya más rápido en la misma pista. 

En general, la evaluación de un modelo incluye las siguientes tareas:

1. Configurar y comenzar un trabajo de evaluación. 

1. Observar la evaluación en curso mientras se está ejecutando el trabajo. Esto se puede hacer en el DeepRacer simulador de AWS. 

1. Inspeccionar el resumen de la evaluación después de haber realizado el trabajo de evaluación. Puede terminar un trabajo de evaluación en curso en cualquier momento.
**nota**  
El tiempo de evaluación depende de los criterios que seleccione. Si su modelo no satisface los criterios de evaluación, la evaluación se seguirá ejecutando hasta que alcance el tope de 20 minutos.

1. Si lo desea, envíe el resultado de la evaluación a una [ DeepRacer tabla de clasificación de AWS](deepracer-racing-series.md) que cumpla los requisitos. La clasificación de la tabla de clasificación le permite informarse del rendimiento de su modelo en comparación con otros participantes.

Pruebe un DeepRacer modelo de AWS con un DeepRacer vehículo de AWS que circule por una pista física, consulte[Opere su DeepRacer vehículo de AWS](operate-deepracer-vehicle.md).

## Optimice los DeepRacer modelos de AWS de entrenamiento para entornos reales
<a name="deepracer-evaluate-model-test-approaches"></a>

Muchos factores influyen en el rendimiento real de un modelo entrenado, como la elección del [espacio de acción](#deepracer-define-action-space-for-training), la [función de recompensa](#deepracer-train-models-define-reward-function), los [hiperparámetros](#deepracer-iteratively-adjust-hyperparameters) utilizados en el entrenamiento y la [calibración del vehículo](deepracer-calibrate-vehicle.md) así como las condiciones de la [pista en tiempo real](deepracer-build-your-track.md). Además, la simulación es solo una aproximación (a menudo general) del mundo real. Todo esto hace que sea un verdadero desafío entrenar un modelo en simulación, aplicarlo en el mundo real y conseguir un buen rendimiento. 

Entrenar un modelo para que tenga un rendimiento sólido en el mundo real a menudo requiere numerosas iteraciones de exploración de la [función de recompensa](#deepracer-train-models-define-reward-function), [los espacios de acción](#deepracer-define-action-space-for-training), [los hiperparámetros](#deepracer-iteratively-adjust-hyperparameters) y [la evaluación](#deepracer-evaluate-models-in-simulator) en simulación, y luego [realizar pruebas](deepracer-drive-your-vehicle.md) en un entorno real. El último paso implica la llamada transferencia *simulation-to-real del mundo* (*sim2real*) y puede resultar difícil de manejar. 

Para abordar los desafíos que plantea el *sim2real*, tenga en cuenta las siguientes consideraciones:
+ Asegúrese de que el vehículo esté bien calibrado. 

  Esto es importante porque es muy probable que el entorno simulado sea solo una representación parcial del entorno real. Además, en cada paso, el agente ejecuta una acción en la condición actual de la pista, tal como se ha tomado en una imagen de la cámara. No puede ver con suficiente perspectiva para planificar su ruta a alta velocidad. Para dar cabida a estos factores, la simulación impone límites a la velocidad y la dirección. Para garantizar que el modelo entrenado funcione en el mundo real, el vehículo tiene que calibrarse correctamente para adaptarse a estas condiciones y otros ajustes de simulación. Para obtener más información para calibrar su vehículo, consulte [Calibre su vehículo de AWS DeepRacer](deepracer-calibrate-vehicle.md).
+ Pruebe su vehículo primero con el modelo predeterminado.

  Su DeepRacer vehículo de AWS viene con un modelo previamente entrenado cargado en su motor de inferencias. Antes de probar su propio modelo en el mundo real, compruebe que el vehículo funcione razonablemente bien con el modelo predeterminado. Si no es así, compruebe la configuración de la pista física. Probar un modelo en una pista física creada incorrectamente probablemente dé lugar a un mal rendimiento. En estos casos, vuelva a configurar o repare la pista antes de comenzar o reanudar las pruebas.
**nota**  
Al ejecutar su DeepRacer vehículo de AWS, las acciones se deducen de acuerdo con la red de políticas entrenada sin invocar la función de recompensa.
+ Asegúrese de que el modelo funcione en simulación.

  Si el modelo no funciona bien en el mundo real, es posible que el modelo o la pista sea defectuoso. Para averiguar la causa inicial, en primer lugar debe [evaluar el modelo en simulaciones](#deepracer-evaluate-models-in-simulator) para comprobar si el agente simulado puede finalizar al menos una vuelta sin salirse de la pista. Puede hacerlo inspeccionando la convergencia de las recompensas al mismo tiempo que observa la trayectoria del agente en el simulador. Si la recompensa llega al máximo cuando el agente simulado completa una vuelta sin errores, probablemente el modelo es bueno.
+ No entrene en exceso el modelo.

  Si sigue entrenando el modelo después de que este haya completado la pista de simulación correctamente causará un ajuste excesivo del modelo. Un modelo entrenado en exceso no funcionará bien en el mundo real, ya que no puede gestionar incluso pequeñas variaciones entre la pista simulada y el entorno real. 
+ Utilice varios modelos de diferentes iteraciones.

  Normalmente, en una sesión de entrenamiento típica se generan varios modelos que van desde modelos insuficientemente ajustados a modelos ajustados en exceso. Como no existen criterios a priori para determinar un modelo que sea adecuado, debe elegir varios modelos candidatos entre el momento en que el agente completa una única vuelta en el simulador y el momento en que realiza las vueltas de forma correcta. 
+ Comience lentamente y luego vaya aumentando gradualmente la velocidad de conducción en las pruebas.

  Al probar el modelo implementado en su vehículo, comience con un valor de velocidad máxima que sea pequeño. Por ejemplo, puede establecer el límite de velocidad de la prueba en <10 % del límite de velocidad de entrenamiento. Luego incremente gradualmente el límite de velocidad de prueba hasta que el vehículo comience a moverse. Puede establecer el límite de velocidad de prueba al calibrar el vehículo mediante la consola de control del dispositivo. Si el vehículo va demasiado rápido, por ejemplo, la si velocidad supera aquellas observadas durante el entrenamiento en simulador, es probable que el modelo no tenga un buen rendimiento en la pista real.
+ Pruebe un modelo con su vehículo en diferentes posiciones de partida.

  El modelo aprende a tomar una ruta determinada en la simulación y puede ser sensible a su posición en la pista. Debe comenzar las pruebas del vehículo con diferentes posiciones en la pista (de la izquierda al centro y luego a la derecha) para ver si el modelo tiene un buen rendimiento desde determinadas posiciones. La mayoría de los modelos tienden a dejar el vehículo cerca de uno de los laterales de las líneas blancas. Para ayudar a analizar la ruta del vehículo, trace las posiciones del vehículo (x, y) paso a paso desde la simulación para identificar las rutas que probablemente tomará el vehículo en un entorno real.
+ Comience las pruebas con una pista recta.

  Una pista recta es mucho más fácil de recorrer que una pista con curvas. Comenzar la prueba con una pisa recta es útil para descartar modelos deficientes rápidamente. Si el vehículo no puede seguir una pista recta la mayor parte del tiempo, tampoco tendrá un buen rendimiento en las pistas con curvas.
+ Observe si el comportamiento del vehículo permite un solo tipo de acción. 

  Si su vehículo solo puede ejecutar un tipo de acción como, por ejemplo, dirigir el vehículo únicamente hacia la izquierda, es probable que el modelo sobremodele o inframodele los datos. Con determinados parámetros de modelo, demasiadas iteraciones en el entrenamiento pueden hacer que el modelo esté excesivamente ajustado. También puede darse el caso de que si las iteraciones son escasas, el modelo esté insuficientemente ajustado.
+ Observe si vehículo tiene capacidad para corregir su ruta a lo largo del límite de una pista.

  Un buen modelo hará que el vehículo se corrija a sí mismo cuando se acerque a los límites de la pista. La mayoría de los modelos bien entrenados tienen esta capacidad. Si el vehículo se puede corregir a sí mismo en ambos límites de la pista, se considerará que el modelo es más sólido y de mayor calidad. 
+ Observe si el vehículo tiene un comportamiento incoherente.

  Un modelo de política representa una distribución de probabilidad para ejecutar una acción en un determinado estado. Con el modelo entrenado cargado en el motor de inferencia, un vehículo elegirá la acción más probable, paso a paso, de acuerdo con lo que indica el modelo. Si las probabilidades de acción están distribuidas de forma uniforme, el vehículo puede ejecutar cualquiera de las acciones de probabilidades que sean iguales o muy parecidas. Esto dará lugar a un comportamiento de conducción errático. Por ejemplo, cuando el vehículo a veces sigue una trayectoria recta (por decir, la mitad del tiempo) y realiza giros innecesarios en otras ocasiones, el modelo sobremodela o inframodela los datos..
+ Preste atención a un solo tipo de giro (a la izquierda o a la derecha) realizado por el vehículo.

  Si el vehículo gira muy bien a la izquierda, pero le falla la dirección a la derecha, o viceversa, si el vehículo solo gira bien hacia la derecha, pero no hacia la izquierda, tendrá que calibrar o volver a calibrar cuidadosamente la dirección del vehículo. De forma alternativa, puede intentar utilizar un modelo que se entrena con una configuración muy parecida a la configuración física que se está probando.
+ Preste atención a si el vehículo realiza giros repentinos y se sale de la trayectoria.

  Si el vehículo sigue la ruta correctamente la mayor parte del tiempo, pero de repente se desvía fuera de la pista, es probable que se deba a distracciones en el entorno. Las distracciones más frecuentes suelen ser reflejos de luz inesperados o no deseados. En tales casos, utilice barreras en torno a la pista u otros medios para reducir las luces brillantes. 

# Referencia de funciones de DeepRacer recompensas de AWS
<a name="deepracer-reward-function-reference"></a>

 La siguiente es la referencia técnica de la función de DeepRacer recompensas de AWS. 

**Topics**
+ [Parámetros de entrada de la función de DeepRacer recompensas de AWS](deepracer-reward-function-input.md)
+ [Ejemplos de funciones de DeepRacer recompensa de AWS](deepracer-reward-function-examples.md)

# Parámetros de entrada de la función de DeepRacer recompensas de AWS
<a name="deepracer-reward-function-input"></a>

La función de DeepRacer recompensa de AWS toma un objeto de diccionario como entrada. 

```
def reward_function(params) :
    
    reward = ...

    return float(reward)
```

El objeto del diccionario `params` contiene los siguientes pares de clave-valor:

```
{
    "all_wheels_on_track": Boolean,        # flag to indicate if the agent is on the track
    "x": float,                            # agent's x-coordinate in meters
    "y": float,                            # agent's y-coordinate in meters
    "closest_objects": [int, int],         # zero-based indices of the two closest objects to the agent's current position of (x, y).
    "closest_waypoints": [int, int],       # indices of the two nearest waypoints.
    "distance_from_center": float,         # distance in meters from the track center 
    "is_crashed": Boolean,                 # Boolean flag to indicate whether the agent has crashed.
    "is_left_of_center": Boolean,          # Flag to indicate if the agent is on the left side to the track center or not. 
    "is_offtrack": Boolean,                # Boolean flag to indicate whether the agent has gone off track.
    "is_reversed": Boolean,                # flag to indicate if the agent is driving clockwise (True) or counter clockwise (False).
    "heading": float,                      # agent's yaw in degrees
    "objects_distance": [float, ],         # list of the objects' distances in meters between 0 and track_length in relation to the starting line.
    "objects_heading": [float, ],          # list of the objects' headings in degrees between -180 and 180.
    "objects_left_of_center": [Boolean, ], # list of Boolean flags indicating whether elements' objects are left of the center (True) or not (False).
    "objects_location": [(float, float),], # list of object locations [(x,y), ...].
    "objects_speed": [float, ],            # list of the objects' speeds in meters per second.
    "progress": float,                     # percentage of track completed
    "speed": float,                        # agent's speed in meters per second (m/s)
    "steering_angle": float,               # agent's steering angle in degrees
    "steps": int,                          # number steps completed
    "track_length": float,                 # track length in meters.
    "track_width": float,                  # width of the track
    "waypoints": [(float, float), ]        # list of (x,y) as milestones along the track center

}
```

A continuación, se incluye una referencia técnica más detallada de los parámetros de entrada. 

## all\$1wheels\$1on\$1track
<a name="reward-function-input-all_wheels_on_track"></a>

**Tipo: ** `Boolean`

**Rango: ** `(True:False)`

Una marca `Boolean` para indicar si el agente está en la pista o fuera de la pista. Está fuera de la pista (`False`) si cualquiera de sus ruedas están fuera de los límites de la pista. Está en la pista (`True`) si todas las ruedas están dentro de los dos límites de la pista. La siguiente ilustración muestra que el vehículo está dentro de la pista. 

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-input-all_wheels_on_track-true.png)


La siguiente ilustración muestra que el agente está fuera de la pista.

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-input-all_wheels_on_track-false.png)


**Ejemplo:** *una función de recompensa utilizando el parámetro `all_wheels_on_track`.*

```
def reward_function(params):
    #############################################################################
    '''
    Example of using all_wheels_on_track and speed
    '''

    # Read input variables
    all_wheels_on_track = params['all_wheels_on_track']
    speed = params['speed']

    # Set the speed threshold based your action space
    SPEED_THRESHOLD = 1.0

    if not all_wheels_on_track:
        # Penalize if the car goes off track
        reward = 1e-3
    elif speed < SPEED_THRESHOLD:
        # Penalize if the car goes too slow
        reward = 0.5
    else:
        # High reward if the car stays on track and goes fast
        reward = 1.0

    return float(reward)
```

## closest\$1waypoints
<a name="reward-function-input-closest_waypoints"></a>

**Tipo:** `[int, int]`

**Rango**: `[(0:Max-1),(1:Max-1)]`

Los índices de base cero de los dos `waypoint` más cercanos a la posición actual `(x, y)` del agente. La distancia se mide por la distancia euclidiana desde el centro del agente. El primer elemento se refiere al punto de ruta más cercano detrás del agente y el segundo elemento hace referencia al punto de ruta más cercano delante del agente. `Max` es la longitud de la lista de puntos de ruta. En la ilustración que se muestra en [waypoints](#reward-function-input-waypoints), los `closest_waypoints` serían `[16, 17]`. 

**Ejemplo**: una función de recompensa utilizando el parámetro `closest_waypoints`.

En el siguiente ejemplo, se muestra cómo utilizar la función de recompensa `waypoints` y `closest_waypoints`, así como `heading` para calcular las recompensas inmediatas.

AWS DeepRacer admite las siguientes bibliotecas: math NumPy SciPy, random y Shapely. Para utilizarlas, añada una declaración de importación, `import supported library`, sobre la definición de la función, `def function_name(parameters)`.

```
# Place import statement outside of function (supported libraries: math, random, numpy, scipy, and shapely)
# Example imports of available libraries
#
# import math
# import random
# import numpy
# import scipy
# import shapely

import math

def reward_function(params):
    ###############################################################################
    '''
    Example of using waypoints and heading to make the car point in the right direction
    '''

    # Read input variables
    waypoints = params['waypoints']
    closest_waypoints = params['closest_waypoints']
    heading = params['heading']

    # Initialize the reward with typical value
    reward = 1.0

    # Calculate the direction of the center line based on the closest waypoints
    next_point = waypoints[closest_waypoints[1]]
    prev_point = waypoints[closest_waypoints[0]]

    # Calculate the direction in radius, arctan2(dy, dx), the result is (-pi, pi) in radians
    track_direction = math.atan2(next_point[1] - prev_point[1], next_point[0] - prev_point[0])
    # Convert to degree
    track_direction = math.degrees(track_direction)

    # Calculate the difference between the track direction and the heading direction of the car
    direction_diff = abs(track_direction - heading)
    if direction_diff > 180:
        direction_diff = 360 - direction_diff

    # Penalize the reward if the difference is too large
    DIRECTION_THRESHOLD = 10.0
    if direction_diff > DIRECTION_THRESHOLD:
        reward *= 0.5

    return float(reward)
​
```

## closest\$1objects
<a name="reward-function-input-closest_objects"></a>

**Tipo:** `[int, int]`

**Rango**: `[(0:len(objects_location)-1), (0:len(objects_location)-1)]`

 Índices basados en cero de los dos objetos más cercanos a la posición actual (x,y) del agente. El primer índice hace referencia al objeto más cercano situado detrás del agente, mientas que el segundo índice hace referencia al objeto más cercano situado delante. Si solo hay un objeto, ambos índices serán 0. 

## distance\$1from\$1center
<a name="reward-function-input-distance_from_center"></a>

**Tipo:** `float`

**Rango**: `0:~track_width/2`

Desplazamiento, en metros, entre el centro del agente y el centro de la pista. El desplazamiento máximo observable se produce cuando cualquiera de las ruedas del agente están fuera del límite de la pista y, en función de la anchura de la pista, puede ser ligeramente más pequeña o más grande que la mitad de `track_width`.

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-input-distance_from_center.png)


**Ejemplo:** *una función de recompensa utilizando el parámetro `distance_from_center`.*

```
def reward_function(params):
    #################################################################################
    '''
    Example of using distance from the center
    '''

    # Read input variable
    track_width = params['track_width']
    distance_from_center = params['distance_from_center']

    # Penalize if the car is too far away from the center
    marker_1 = 0.1 * track_width
    marker_2 = 0.5 * track_width

    if distance_from_center <= marker_1:
        reward = 1.0
    elif distance_from_center <= marker_2:
        reward = 0.5
    else:
        reward = 1e-3  # likely crashed/ close to off track

    return float(reward)
```

## heading
<a name="reward-function-input-heading"></a>

**Tipo:** `float`

**Rango**: `-180:+180`

La dirección hacia la que se dirige, en grados, del agente con respecto al eje x del sistema de coordenadas.

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-input-heading.png)


**Ejemplo:** *una función de recompensa utilizando el parámetro `heading`.*

Para obtener más información, consulte [`closest_waypoints`](#reward-function-input-closest_waypoints).

## is\$1crashed
<a name="reward-function-input-crashed"></a>

**Tipo:** `Boolean`

**Rango**: `(True:False)`

Indicador booleano para indicar si el agente ha chocado contra otro objeto (`True`) o no (`False`) como estado de terminación. 

## is\$1left\$1of\$1center
<a name="reward-function-input-is_left_of_center"></a>

**Tipo:** `Boolean`

**Rango**: `[True : False]`

Una marca `Boolean` para indicar si el agente se encuentra en el lado izquierdo con respecto al centro de la pista (`True`) o en el lado derecho (`False`). 

## is\$1offtrack
<a name="reward-function-input-offtrack"></a>

**Tipo:** `Boolean`

**Rango**: `(True:False)`

Indicador booleano para indicar si el agente tiene un estado de fuera de la pista (Verdadero) o no (False) como estado de terminación. 

## is\$1reversed
<a name="reward-function-input-is_reversed"></a>

**Tipo:** `Boolean`

**Rango**: `[True:False]`

Un indicador booleano para indicar si el agente está conduciendo en sentido horario (True) o antihorario (False). 

Se utiliza cuando se habilita el cambio de dirección para cada episodio. 

## objects\$1distance
<a name="reward-function-input-objects_distance"></a>

**Tipo:** `[float, … ]`

**Rango**: `[(0:track_length), … ]`

Lista de las distancias entre objetos del entorno en relación con la línea de salida. El elemento ith mide la distancia en metros entre el objeto ith y la línea de salida a lo largo de la línea central de la pista. 

**nota**  
abs \$1 (var1) - (var2)\$1 = a qué distancia está el coche de un objeto, WHEN var1 = ["objects\$1distance"][index] y var2 = params["progress"]\$1params["track\$1length"]  
Para obtener el índice del objeto más cercano que hay delante del vehículo y del objeto más cercano que hay detrás del vehículo, utilice el parámetro «closest\$1objects».

## objects\$1heading
<a name="reward-function-input-objects_heading"></a>

**Tipo:** `[float, … ]`

**Rango**: `[(-180:180), … ]`

Lista de los encabezados de los objetos en grados. El elemento ith mide el encabezado del objeto ith. Para los objetos estacionarios, los encabezados son 0. Para un vehículo robot, el valor del elemento correspondiente es el ángulo de rumbo del vehículo.

## objects\$1left\$1of\$1center
<a name="reward-function-input-objects_left_of_center"></a>

**Tipo:** `[Boolean, … ]`

**Rango**: `[True|False, … ]`

Lista de banderas booleanas. El valor del elemento ith indica si el objeto ith está en el lado izquierdo (True) o derecho (False) del centro de la pista. 

## objects\$1location
<a name="reward-function-input-objects_location"></a>

**Tipo:** `[(x,y), … ]`

**Rango**: `[(0:N,0:N), … ]`

Lista de todas las ubicaciones de objetos, cada ubicación es una tupla de ([x, y](#reward-function-input-x_y)). 

El tamaño de la lista es igual al número de objetos en la pista. Tenga en cuenta que el objeto podría ser los obstáculos estacionarios, vehículos robot en movimiento. 

## objects\$1speed
<a name="reward-function-input-objects_speed"></a>

**Tipo:** `[float, … ]`

**Rango**: `[(0:12.0), … ]`

Lista de velocidades (metros por segundo) para los objetos en la pista. En objetos estacionarios, las velocidades son 0. En un vehículo robot, el valor es la velocidad que se establece en el entrenamiento. 

## avance
<a name="reward-function-input-progress"></a>

**Tipo:** `float`

**Rango**: `0:100`

Porcentaje de pista completado.

**Ejemplo:** *una función de recompensa utilizando el parámetro `progress`.*

Para obtener más información, consulte [pasos](#reward-function-input-steps).

## speed
<a name="reward-function-input-speed"></a>

**Tipo:** `float`

**Rango**: `0.0:5.0`

La velocidad observada del agente, en metros por segundo (m/s).

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-input-speed.png)


**Ejemplo:** *una función de recompensa utilizando el parámetro `speed`.*

Para obtener más información, consulte la sección [all\$1wheels\$1on\$1track](#reward-function-input-all_wheels_on_track).

## steering\$1angle
<a name="reward-function-input-steering_angle"></a>

**Tipo:** `float`

**Rango**: `-30:30`

Ángulo de dirección, en grados, de las ruedas delanteras desde la línea central del agente. El signo negativo (-) significa maniobrar hacia la derecha y el signo positivo (\$1) significa maniobrar hacia la izquierda. La línea central del agente no tiene que estar necesariamente paralela a la línea central paralela tal y como se muestra en la siguiente ilustración.

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-steering.png)


**Ejemplo:** *una función de recompensa utilizando el parámetro `steering_angle`.*

```
def reward_function(params):
    '''
    Example of using steering angle
    '''

    # Read input variable
    abs_steering = abs(params['steering_angle']) # We don't care whether it is left or right steering

    # Initialize the reward with typical value
    reward = 1.0

    # Penalize if car steer too much to prevent zigzag
    ABS_STEERING_THRESHOLD = 20.0
    if abs_steering > ABS_STEERING_THRESHOLD:
        reward *= 0.8

    return float(reward)
```

## pasos
<a name="reward-function-input-steps"></a>

**Tipo:** `int`

**Rango**: `0:Nstep`

Número de pasos completados. Un paso corresponde a una acción realizada por el agente siguiendo la política actual.

**Ejemplo:** *una función de recompensa utilizando el parámetro `steps`.*

```
def reward_function(params):
    #############################################################################
    '''
    Example of using steps and progress
    '''

    # Read input variable
    steps = params['steps']
    progress = params['progress']

    # Total num of steps we want the car to finish the lap, it will vary depends on the track length
    TOTAL_NUM_STEPS = 300

    # Initialize the reward with typical value
    reward = 1.0

    # Give additional reward if the car pass every 100 steps faster than expected
    if (steps % 100) == 0 and progress > (steps / TOTAL_NUM_STEPS) * 100 :
        reward += 10.0

    return float(reward)
```

## track\$1length
<a name="reward-function-input-track_len"></a>

**Type (Tipo)**: `float`

**Rango**: `[0:Lmax]`

La longitud de la pista en metros. `Lmax is track-dependent.`

## track\$1width
<a name="reward-function-input-track_width"></a>

**Tipo:** `float`

**Rango**: `0:Dtrack`

Ancho de la pista en metros.

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-input-track_width.png)


**Ejemplo:** *una función de recompensa utilizando el parámetro `track_width`.*

```
def reward_function(params):
    #############################################################################
    '''
    Example of using track width
    '''

    # Read input variable
    track_width = params['track_width']
    distance_from_center = params['distance_from_center']

    # Calculate the distance from each border
    distance_from_border = 0.5 * track_width - distance_from_center

    # Reward higher if the car stays inside the track borders
    if distance_from_border >= 0.05:
        reward = 1.0
    else:
        reward = 1e-3 # Low reward if too close to the border or goes off the track

    return float(reward)
```

## x, y
<a name="reward-function-input-x_y"></a>

**Tipo:** `float`

**Rango**: `0:N`

Ubicación, en metros, del centro del agente a lo largo de los ejes x e y, del entorno simulado que contiene la pista. El origen se encuentra en el ángulo inferior izquierdo del entorno simulado.

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-input-x-y.png)


## waypoints
<a name="reward-function-input-waypoints"></a>

**Tipo**: `list` de `[float, float]`

**Rango**: `[[xw,0,yw,0] … [xw,Max-1, yw,Max-1]]`

Una lista ordenada de hitos `Max` dependientes de la pista a lo largo del centro de la pista. Cada hito se describe mediante una coordenada de (xw,i, yw,i). Para una pista en bucle, el primer y el último señalador son los mismos. Para una pista recta u otra pista no en bucle, el primer y el último señalador son distintos.

![\[\]](http://docs.aws.amazon.com/es_es/deepracer/latest/developerguide/images/deepracer-reward-function-input-waypoints.png)


**Ejemplo:** *una función de recompensa utilizando el parámetro `waypoints`.*

Para obtener más información, consulte [`closest_waypoints`](#reward-function-input-closest_waypoints).

# Ejemplos de funciones de DeepRacer recompensa de AWS
<a name="deepracer-reward-function-examples"></a>

A continuación se enumeran algunos ejemplos de la función de DeepRacer recompensas de AWS.

**Topics**
+ [Ejemplo 1: seguir la línea central en contrarreloj](#deepracer-reward-function-example-0)
+ [Ejemplo 2: permanecer dentro de los límites en contrarreloj](#deepracer-reward-function-example-1)
+ [Ejemplo 3: evitar zigzaguear en las contrarreloj](#deepracer-reward-function-example-2)
+ [Ejemplo 4: permanecer en un carril sin chocar con obstáculos estacionarios ni vehículos en movimiento](#deepracer-reward-function-example-3)

## Ejemplo 1: seguir la línea central en contrarreloj
<a name="deepracer-reward-function-example-0"></a>

 En este ejemplo se determina a qué distancia está el agente de la línea central y se otorga una mayor recompensa si está más cerca del centro de la pista, animando al agente a seguir de cerca la línea central. 

```
def reward_function(params):
    '''
    Example of rewarding the agent to follow center line
    '''
    
    # Read input parameters
    track_width = params['track_width']
    distance_from_center = params['distance_from_center']

    # Calculate 3 markers that are increasingly further away from the center line
    marker_1 = 0.1 * track_width
    marker_2 = 0.25 * track_width
    marker_3 = 0.5 * track_width

    # Give higher reward if the car is closer to center line and vice versa
    if distance_from_center <= marker_1:
        reward = 1
    elif distance_from_center <= marker_2:
        reward = 0.5
    elif distance_from_center <= marker_3:
        reward = 0.1
    else:
        reward = 1e-3  # likely crashed/ close to off track

    return reward
```

## Ejemplo 2: permanecer dentro de los límites en contrarreloj
<a name="deepracer-reward-function-example-1"></a>

 Este ejemplo simplemente da grandes recompensas si el agente permanece dentro de los límites, y deja que el agente descubra cuál es el mejor camino para terminar una vuelta. Es fácil de programar y entender, pero probablemente tarde más en converger. 

```
def reward_function(params):
    '''
    Example of rewarding the agent to stay inside the two borders of the track
    '''
    
    # Read input parameters
    all_wheels_on_track = params['all_wheels_on_track']
    distance_from_center = params['distance_from_center']
    track_width = params['track_width']
    
    # Give a very low reward by default
    reward = 1e-3

    # Give a high reward if no wheels go off the track and 
    # the car is somewhere in between the track borders 
    if all_wheels_on_track and (0.5*track_width - distance_from_center) >= 0.05:
        reward = 1.0

    # Always return a float value
    return reward
```

## Ejemplo 3: evitar zigzaguear en las contrarreloj
<a name="deepracer-reward-function-example-2"></a>

 Este ejemplo incentiva al agente a seguir la línea central, pero le penaliza con una recompensa menor si vira demasiado, lo que ayuda a prevenir el zigzagueo. El agente aprende a conducir sin zigzaguear en el simulador y probablemente mantendrá el mismo comportamiento cuando se implemente al vehículo físico. 

```
def reward_function(params):
    '''
    Example of penalize steering, which helps mitigate zig-zag behaviors
    '''
    
    # Read input parameters
    distance_from_center = params['distance_from_center']
    track_width = params['track_width']
    abs_steering = abs(params['steering_angle']) # Only need the absolute steering angle

    # Calculate 3 marks that are farther and father away from the center line
    marker_1 = 0.1 * track_width
    marker_2 = 0.25 * track_width
    marker_3 = 0.5 * track_width

    # Give higher reward if the car is closer to center line and vice versa
    if distance_from_center <= marker_1:
        reward = 1.0
    elif distance_from_center <= marker_2:
        reward = 0.5
    elif distance_from_center <= marker_3:
        reward = 0.1
    else:
        reward = 1e-3  # likely crashed/ close to off track

    # Steering penality threshold, change the number based on your action space setting
    ABS_STEERING_THRESHOLD = 15 

    # Penalize reward if the car is steering too much
    if abs_steering > ABS_STEERING_THRESHOLD:
        reward *= 0.8

    return float(reward)
```

## Ejemplo 4: permanecer en un carril sin chocar con obstáculos estacionarios ni vehículos en movimiento
<a name="deepracer-reward-function-example-3"></a>

 

Esta función de recompensa premia al agente por permanecer dentro de los límites de la pista y penaliza al agente por acercarse demasiado al objeto que tiene delante. El agente puede moverse de carril en carril para evitar accidentes. La recompensa total es una suma ponderada de la recompensa y la penalización. El ejemplo da más peso a la penalización para centrarse más en la seguridad evitando accidentes. Experimente con diferentes pesos promedios para entrenarse y obtener diferentes resultados de comportamiento.

 

```
import math
def reward_function(params):
    '''
    Example of rewarding the agent to stay inside two borders
    and penalizing getting too close to the objects in front
    '''
    all_wheels_on_track = params['all_wheels_on_track']
    distance_from_center = params['distance_from_center']
    track_width = params['track_width']
    objects_location = params['objects_location']
    agent_x = params['x']
    agent_y = params['y']
    _, next_object_index = params['closest_objects']
    objects_left_of_center = params['objects_left_of_center']
    is_left_of_center = params['is_left_of_center']
    # Initialize reward with a small number but not zero
    # because zero means off-track or crashed
    reward = 1e-3
    # Reward if the agent stays inside the two borders of the track
    if all_wheels_on_track and (0.5 * track_width - distance_from_center) >= 0.05:
        reward_lane = 1.0
    else:
        reward_lane = 1e-3
    # Penalize if the agent is too close to the next object
    reward_avoid = 1.0
    # Distance to the next object
    next_object_loc = objects_location[next_object_index]
    distance_closest_object = math.sqrt((agent_x - next_object_loc[0])**2 + (agent_y - next_object_loc[1])**2)
    # Decide if the agent and the next object is on the same lane
    is_same_lane = objects_left_of_center[next_object_index] == is_left_of_center
    if is_same_lane:
        if 0.5 <= distance_closest_object < 0.8:
            reward_avoid *= 0.5
        elif 0.3 <= distance_closest_object < 0.5:
            reward_avoid *= 0.2
        elif distance_closest_object < 0.3:
            reward_avoid = 1e-3  # Likely crashed
    # Calculate reward by putting different weights on
    # the two aspects above
    reward += 1.0 * reward_lane + 4.0 * reward_avoid
    return reward
```