Este proyecto proporciona una infraestructura optimizada para el aprendizaje por refuerzo. Extiende la interfaz del gimnasio OpenAI a múltiples entornos paralelos y permite implementar agentes en TensorFlow y realizar cálculos por lotes. Como punto de partida, proporcionamos BatchPPO, una implementación optimizada de optimización de políticas próximas.
Cite el artículo de TensorFlow Agents si utiliza código de este proyecto en su investigación:
@article { hafner2017agents ,
title = { TensorFlow Agents: Efficient Batched Reinforcement Learning in TensorFlow } ,
author = { Hafner, Danijar and Davidson, James and Vanhoucke, Vincent } ,
journal = { arXiv preprint arXiv:1709.02878 } ,
year = { 2017 }
}
Dependencias: Python 2/3, TensorFlow 1.3+, Gimnasio, ruamel.yaml
Clona el repositorio y ejecuta el algoritmo PPO escribiendo:
python3 -m agents.scripts.train --logdir=/path/to/logdir --config=pendulum
El algoritmo a utilizar se define en la configuración y pendulum
iniciado aquí utiliza la implementación PPO incluida. Consulte más configuraciones predefinidas en agents/scripts/configs.py
.
Si desea reanudar una ejecución iniciada anteriormente, agregue el indicador --timestamp=<time>
al último comando y proporcione la marca de tiempo en el nombre del directorio de su ejecución.
Para visualizar métricas, inicie TensorBoard desde otra terminal, luego apunte su navegador a http://localhost:2222
:
tensorboard --logdir=/path/to/logdir --port=2222
Para renderizar videos y recopilar estadísticas de OpenAI Gym para cargarlas en el marcador, escriba:
python3 -m agents.scripts.visualize --logdir=/path/to/logdir/ < time > - < config > --outdir=/path/to/outdir/
Lanzamos este proyecto como un punto de partida que facilita la implementación de nuevas ideas de aprendizaje por refuerzo. Estos archivos son buenos lugares para comenzar a modificar el código:
Archivo | Contenido |
---|---|
scripts/configs.py | Configuraciones de experimentos especificando las tareas y algoritmos. |
scripts/networks.py | Modelos de redes neuronales. |
scripts/train.py | El archivo ejecutable que contiene la configuración del entrenamiento. |
algorithms/ppo/ppo.py | El gráfico de TensorFlow para el algoritmo PPO. |
Para ejecutar pruebas unitarias y linting, escriba:
python2 -m unittest discover -p " *_test.py "
python3 -m unittest discover -p " *_test.py "
python3 -m pylint agents
Si tiene más preguntas, abra un problema en Github.
Incluimos una interfaz por lotes para entornos OpenAI Gym que se integra completamente con TensorFlow para implementaciones de algoritmos eficientes. Esto se logra a través de estos componentes principales:
agents.tools.wrappers.ExternalProcess
es un contenedor de entorno que construye un entorno OpenAI Gym dentro de un proceso externo. Las llamadas a step()
y reset()
, así como el acceso a los atributos, se reenvían al proceso y esperan el resultado. Esto permite ejecutar múltiples entornos en paralelo sin estar restringido por el bloqueo global del intérprete de Python.agents.tools.BatchEnv
extiende la interfaz OpenAI Gym a lotes de entornos. Combina múltiples entornos OpenAI Gym, con step()
aceptando un lote de acciones y devolviendo un lote de observaciones, recompensas, indicadores de finalización y objetos de información. Si los entornos individuales viven en procesos externos, se avanzarán en paralelo.agents.tools.InGraphBatchEnv
integra un entorno por lotes en el gráfico de TensorFlow y hace que sus funciones step()
y reset()
sean accesibles como operaciones. El lote actual de observaciones, últimas acciones, recompensas y indicadores realizados se almacena en variables y está disponible como tensores.agents.tools.simulate()
fusiona el paso de un entorno por lotes en el gráfico y un algoritmo de aprendizaje por refuerzo en una única operación que se llamará dentro del ciclo de entrenamiento. Esto reduce la cantidad de llamadas a sesiones y proporciona una forma sencilla de entrenar algoritmos futuros. Para comprender todo el código, familiarícese con las operaciones de flujo de control de TensorFlow, especialmente tf.cond()
, tf.scan()
y tf.control_dependencies()
.
Este no es un producto oficial de Google.