Muy agradecido con este video, estoy leyendo reinforcement learning de Sutton y Barto, y este tipo de videos en español ayuda mucho a incorporar los temas , muchas gracias y un saludo 🫂
Hola, primero gracias por la explicación, me ayudó mucho. Tenía algunas dudas con respecto al Q-table, tras estudiar unos minutos llegué a la siguiente conclusión (puede que a alguien más le sirva): 'qtable' Es una matriz de 20x20x3, aquí se almacenarán los valores de probabilidad teniendo en cuenta 3 parámetros: - Posición, velocidad y acción escogida Para posición y velocidad se dividieron los posibles escenarios en 20, es decir que dentro de los valores reales dados por estos dos parámetros se redondean para que caigan en uno de 20 intervalos, por eso 20 por 20, y en esos intervalos se escoge uno de 3 posibles decisiones, allí se almacenarán los valores de probabilidad. Puede que sea un poco confuso el código del video por la siguiente razón, las siguientes 3 formas de llamar un espacio son similares: - q_table[(1,1)][0] - q_table[1][1][0] - q_table[(1,1,0)] Entonces fijate bien en qué parte lo que se llama es un valor sencillo o una tupla con 2 valores (como es el caso de la variable 'estado')
Genial!!! Por fin encuentro un vídeo sobre programación de aprendizaje reforzado!!! Por fin podré poner en práctica este tipo de tecnología. Por favor, más vídeos como este!!
@@garcia-ferreiraHola, a mi me aparece en pycharm que env.step(accion) tiene mas de 4 valores, como podria almacenar todos esos valores restantes en "info"?
tengo 6 meses buscando alguien entendible, si bien es un tema delicado donde tenes que si o si entender la formula, tenes la mejor explicacion que e encontrado en 2 años sobre este tema, me permitiste avanzar de 0 porque no existe buen material sobre este tema en español ... espero que sigas el tema y vayas enseñando diferentes algoritmos, formas y demas
Mil gracias por desglosar la ecuacion de Bellman, sin tanta tinta matemática. La mayoría de los que tratan de explicarla, se jartan de entender la ecuación, pero no de explicarla con un ejemplo tan sencillo y pragmático como el suyo. Recomendacion: que el codigo se vea un poco mas grande en pantalla, para no perder el hilo de su tutorial. Un saludo desde Colombia.
Muy buenas Iván. Antes que nada muchas gracias por tus videos. Quería aportar que a la hora de discretizar, env.reset() devuelve una tupla a la que hay que coger el índice 0 para descartar el resto. Es decir: def discretizar(valor): valor = valor[0] ... (continuar el resto de la función) Me temo que esto es debido a que tenemos diferentes versiones de gym y por eso el problema de estructura de datos. Saludos y gracias de nuevo!
Amplio información al respecto: A partir de la versión 0.25 se incluyeron varios cambios. - El método .step() renderiza automáticamente y no hay opción de evitarlo. Esto causa varios problemas con abrir y cerrar la ventana de renderizado. - El método .action() retorna 5 valores en vez de 4, pero eso no es mayor problema. - 'nuevo_estado' no contiene solamente los dos valores, sino el tipo de datos que almacena y por ello el error que comenté de usar valor[0]. Creo que usas la versión de gym 0.24.1, ?pero podrías confirmarlo? Aun en esta versión la ventana de renderizado no se cierra correctamente sin finalizar el entorno, cosa que no es viable. Muchas gracias y un saludo, Juanfe
Me autorespondo, por si le ayuda a alguien. Con la versión de gym 0.24.1 se puede seguir los pasos de Iván sin problemas. La causa de que se congelará la pantalla de pygame y diera error a la hora de hacer otra vez render es que la instrucción de env.close() debe ir al final ya terminado el for, es decir, no lleva tabulación. Un saludo y a la espera de nuevos videos Iván. Muchas gracias!
@@eduardorosentreter con el curro que se pegó Iván haciendo el video, no iba a dejar de compartir mi pequeño granito de arena con él y los compañeros. De eso se trata, de compartir. Un saludo!
Buen video, tengo una duda. Una vez entrenado el modelo si se exporta y lo importamos en otro ejercicio igual, pero que el camino tenga otra forma. Lo resolvería antes que un modelo nuevo? gracias
una pregunta, siempre he visto que hay que entrenarlo teniendo un gpu, hay forma de hacerlo sin gpu?. de forma local. o con los mismos nucleos del cpu?
No es necesario tener una GPU para realizar el entrenamiento. Puedes hacerlo con una CPU normal, la única diferencia es que te llevará más tiempo el entrenamiento, pero por lo demás te funcionará igual.
@@garcia-ferreira muchas gracias sino que vi que la libreria gym pedia usar keras para el entrenamiento. por eso es que pense que solo se podia entrenar teniendo una gpu. otra consulta, si quisiera entrenar el sistema de forma simultanea. osea simular 2 o 3 escenarios mas en simultaneo para entrenarlo mas rapido y aprenda mas rapido. como tendria que modificar el codigo o en que parte tendria que modificarlo?
@@showland7826 No se si te entiendo muy bien la pregunta, si te refieres a lanzar más procesos de entrenamiento para que vaya más rápido no vas a poder hacer nada, ya que el límite es tu CPU. Aunque lances muchos procesos solo tienes una CPU para gestionarlos, así que no tiene mucho sentido. Si tienes más preguntas puedes escribirme a ivan@garcia-ferreira.es y así me puedes detallar las preguntas mucho mejor.
Hola Iván!! Excelente video, muchas gracias. Solo una duda. Veo que ya la librería gym cambió a gymnasium y cuando trato de practicar con tu código me sale el siguiente error: TypeError: unsupported operand type(s) for -: 'dict' and 'float'. Sabes a qué se podría deber?? Muchas gracias nuevamente por el video y la explicación.
Hola Andrés, pues no lo tengo claro, así sin ver el código y donde te falla es difícil de saber. Si quieres desde mí página www.garcia-ferreira.es/blogger-gb-contact/ mándame un mensaje y te contesto y lo vamos tratando por correo.
Muy agradecido con este video, estoy leyendo reinforcement learning de Sutton y Barto, y este tipo de videos en español ayuda mucho a incorporar los temas , muchas gracias y un saludo 🫂
Hola, primero gracias por la explicación, me ayudó mucho. Tenía algunas dudas con respecto al Q-table, tras estudiar unos minutos llegué a la siguiente conclusión (puede que a alguien más le sirva):
'qtable' Es una matriz de 20x20x3, aquí se almacenarán los valores de probabilidad teniendo en cuenta 3 parámetros:
- Posición, velocidad y acción escogida
Para posición y velocidad se dividieron los posibles escenarios en 20, es decir que dentro de los valores reales dados por estos dos parámetros
se redondean para que caigan en uno de 20 intervalos, por eso 20 por 20, y en esos intervalos se escoge uno de 3 posibles decisiones, allí se almacenarán
los valores de probabilidad.
Puede que sea un poco confuso el código del video por la siguiente razón, las siguientes 3 formas de llamar un espacio son similares:
- q_table[(1,1)][0]
- q_table[1][1][0]
- q_table[(1,1,0)]
Entonces fijate bien en qué parte lo que se llama es un valor sencillo o una tupla con 2 valores (como es el caso de la variable 'estado')
Muy bueno Iván, me lo he tragado enterito y queda muy bien explicado. Enhorabuena de nuevo. 😉
Genial!!! Por fin encuentro un vídeo sobre programación de aprendizaje reforzado!!!
Por fin podré poner en práctica este tipo de tecnología.
Por favor, más vídeos como este!!
Gracias por los ánimos! Subiré más videos de este tipo que veo que está cogiendo mucho interés.
@@garcia-ferreiraHola, a mi me aparece en pycharm que env.step(accion) tiene mas de 4 valores, como podria almacenar todos esos valores restantes en "info"?
tengo 6 meses buscando alguien entendible, si bien es un tema delicado donde tenes que si o si entender la formula, tenes la mejor explicacion que e encontrado en 2 años sobre este tema, me permitiste avanzar de 0 porque no existe buen material sobre este tema en español ... espero que sigas el tema y vayas enseñando diferentes algoritmos, formas y demas
Mil gracias por desglosar la ecuacion de Bellman, sin tanta tinta matemática. La mayoría de los que tratan de explicarla, se jartan de entender la ecuación, pero no de explicarla con un ejemplo tan sencillo y pragmático como el suyo.
Recomendacion: que el codigo se vea un poco mas grande en pantalla, para no perder el hilo de su tutorial.
Un saludo desde Colombia.
me gustaría que subas mas videos.., es muy buen contenido 🎉
Buen vídeo Ivan.
Muy buenas Iván. Antes que nada muchas gracias por tus videos.
Quería aportar que a la hora de discretizar, env.reset() devuelve una tupla a la que hay que coger el índice 0 para descartar el resto. Es decir:
def discretizar(valor):
valor = valor[0]
... (continuar el resto de la función)
Me temo que esto es debido a que tenemos diferentes versiones de gym y por eso el problema de estructura de datos.
Saludos y gracias de nuevo!
Amplio información al respecto:
A partir de la versión 0.25 se incluyeron varios cambios.
- El método .step() renderiza automáticamente y no hay opción de evitarlo. Esto causa varios problemas con abrir y cerrar la ventana de renderizado.
- El método .action() retorna 5 valores en vez de 4, pero eso no es mayor problema.
- 'nuevo_estado' no contiene solamente los dos valores, sino el tipo de datos que almacena y por ello el error que comenté de usar valor[0].
Creo que usas la versión de gym 0.24.1, ?pero podrías confirmarlo? Aun en esta versión la ventana de renderizado no se cierra correctamente sin finalizar el entorno, cosa que no es viable.
Muchas gracias y un saludo,
Juanfe
Me autorespondo, por si le ayuda a alguien.
Con la versión de gym 0.24.1 se puede seguir los pasos de Iván sin problemas.
La causa de que se congelará la pantalla de pygame y diera error a la hora de hacer otra vez render es que la instrucción de env.close() debe ir al final ya terminado el for, es decir, no lleva tabulación.
Un saludo y a la espera de nuevos videos Iván. Muchas gracias!
@@JuanfeDV gracias por el interés mostrado y por la implicación. Estoy ya creando nuevos vídeos para el canal, así que pronto habrá más.
Nunca había agradecido a alguien por autorresponderse y hablar solo LoL 😂😂😂😂
Muchas gracias por el detalle bro
@@eduardorosentreter con el curro que se pegó Iván haciendo el video, no iba a dejar de compartir mi pequeño granito de arena con él y los compañeros. De eso se trata, de compartir. Un saludo!
Buen video, tengo una duda. Una vez entrenado el modelo si se exporta y lo importamos en otro ejercicio igual, pero que el camino tenga otra forma. Lo resolvería antes que un modelo nuevo? gracias
Buen video , para cuando subes. Otro
Muchas gracias!!
Muy buen video, cree poder subir un video de q Learnig pero enfocado en redes
Sí, uno de los videos futuros será implementando redes neuronales para hacer aprendizaje por refuerzo. Así que estate atento al canal ;)
una pregunta, siempre he visto que hay que entrenarlo teniendo un gpu, hay forma de hacerlo sin gpu?. de forma local. o con los mismos nucleos del cpu?
No es necesario tener una GPU para realizar el entrenamiento. Puedes hacerlo con una CPU normal, la única diferencia es que te llevará más tiempo el entrenamiento, pero por lo demás te funcionará igual.
@@garcia-ferreira muchas gracias sino que vi que la libreria gym pedia usar keras para el entrenamiento. por eso es que pense que solo se podia entrenar teniendo una gpu. otra consulta, si quisiera entrenar el sistema de forma simultanea. osea simular 2 o 3 escenarios mas en simultaneo para entrenarlo mas rapido y aprenda mas rapido. como tendria que modificar el codigo o en que parte tendria que modificarlo?
@@showland7826 No se si te entiendo muy bien la pregunta, si te refieres a lanzar más procesos de entrenamiento para que vaya más rápido no vas a poder hacer nada, ya que el límite es tu CPU. Aunque lances muchos procesos solo tienes una CPU para gestionarlos, así que no tiene mucho sentido. Si tienes más preguntas puedes escribirme a ivan@garcia-ferreira.es y así me puedes detallar las preguntas mucho mejor.
@@garcia-ferreira te escribi explicandote a detalle si hubiera una forma mas directa como discord seria genial. gracias
Estoy trabajando en crear un comunidad Discord, en cuanto la tenga te aviso ;)
Hola! Vas a continuar con más vídeo??
que genial la musica. Hasta me dieron ganas de tocar piano
Entonces en juegos que requieren cambios de objetos continuos, el agente tendria que recurrir a una memoria externa al juego?
Alguien tiene el codigo fuente del ejemplo? lo he intentado correr en google colab y no me sale :(
Bueno video amigo solo que tengo duda como usar Jupyter lab y de donde sale, soy nuevo en este tema y quisiera un tutorial más detallado 🙏
El método de montecarlo porfa con Frozen Lake
la funcion discretizar no entiendo como te funciona, el env.reset() me devuelve lo siguiente: (array([-0.5239461, 0. ], dtype=float32), {})
Gracias Ryan reynolds de españa
Siempre me gusto mas los algoritmos geneticos para optimizar los pesos de la red neuronal.
Hola Iván!! Excelente video, muchas gracias. Solo una duda. Veo que ya la librería gym cambió a gymnasium y cuando trato de practicar con tu código me sale el siguiente error: TypeError: unsupported operand type(s) for -: 'dict' and 'float'. Sabes a qué se podría deber?? Muchas gracias nuevamente por el video y la explicación.
Hola Andrés, pues no lo tengo claro, así sin ver el código y donde te falla es difícil de saber. Si quieres desde mí página www.garcia-ferreira.es/blogger-gb-contact/ mándame un mensaje y te contesto y lo vamos tratando por correo.
MODULA. POR FAVOR, MODULA!! Que hay que hacer un esfuerzo sobrehumano para entenderte a cabalidad.