Hola y bienvenidos a este tutorial de Python en Statoil, vamos a dar el primer paso para
implementar el modelo teórico profundo.
Entonces, básicamente, estamos a punto de implementar todo el proceso del algoritmo de difusión.
Y entonces vamos a usar lo que creamos antes.
Esa es la arquitectura de la red neuronal para reproducir la memoria para integrar esto en todo el
proceso de aprendizaje de dequeue.
Y todo este algoritmo de aprendizaje encajará en una sola clase.
Es lo último que estamos haciendo para implementar inteligencia artificial.
Y esta clase solo contendrá diferentes funciones.
Así que tendremos las funciones en él que crearán e inicializarán todas las variables adjuntas
a nuestros futuros objetos de desvío que representarán el modelo en sí y tendrán algunas otras funciones.
Uno de ellos será, por supuesto, seleccionar la acción correcta en cada momento.
También tendremos una función central de función de actualización para obtener este núcleo y tener una idea de cómo
va el aprendizaje si va bien.
Si la exploración está yendo bien y si puede pasar a la explotación, entonces tendremos una función
segura para salvar mañana que es salvar el cerebro del automóvil y luego cargar la función.
Entonces tenemos un par de funciones para hacer.
Vamos a hacer una función para que cada uno trabaje.
Y hoy vamos a comenzar con la función final como de costumbre cuando estamos haciendo una clase.
Pero primero no olvidemos presentar la clase, así que vamos a llamarla D.
Q Y para su red, entonces algunos paréntesis llaman.
Y luego vamos con nuestra primera función.
Así que hagamos esta def entonces doblar el guión bajo y luego su doble guión de subrayado y paréntesis.
Entonces, como usted entendió en esta función, vamos a presentar las variables adjuntas a nuestro objeto.
Así que vamos a tener un par de líneas comenzando por nosotros mismos y básicamente crearemos e
iniciaremos todas las variables que se necesitan para implementar la red D2.
Así que, por ejemplo, crearemos un objeto o una red porque, por supuesto, necesitamos nuestra red neuronal
profunda, entonces necesitaremos nuestra memoria.
Crearemos otra variable para la memoria.
Así que tendremos otra memoria variable, pero eso no es todo lo que tendremos que crear también.
Algunas variables para la última fecha.
La última acción y la última palabra.
Por supuesto, usted conoce las variables que ve en el algoritmo de difusión.
Y luego qué más.
Bueno, también necesitaremos un optimizador que conozca para realizar una cuadrícula estocástica en el sentido
de ponderación de datos según cuánto contribuyan al error.
Cuando la IA está cometiendo un error y creo que eso es básicamente las variables que ahora
necesitamos crear e inicializar.
Pero en esta función de inicio pondremos primero un par de argumentos como de costumbre, que son los argumentos que se
refieren a nuestro objeto.
Entonces, como sabes, vamos a crear un objeto de la clase de red.
Bueno, ya que la clase de red toma como argumento el tamaño de entrada de la función init y la acción Bueno, aquí
es lo mismo.
Al crear un objeto de la clase de red, tendremos que elegir un argumento de tamaño de entrada
y el argumento real.
Por lo tanto, podemos copiarlos
aquí y aquí vamos.
Entonces estos argumentos se volverán ahora.
También algunos argumentos no duraron.
Cada vez que creamos algunos objetos futuros de la clase diferente que algunos futuros modelos de roles dicales Bueno, tendremos
que especificar el tamaño de entrada que recuerdo es la cantidad de dimensiones en los vectores
que incluyen sus estados.
Su entrada de estados y una serie de acciones que es la cantidad de acciones posibles que puede realizar el automóvil.
Así que te lo recuerdo.
Estos son o bien, ir a la izquierda, seguir recto o ir a la derecha.
Bien perfecto.
Entonces sabrá que va a crear un nuevo objeto de la clase de memoria de repetición para crear
el objeto de memoria para obtener nuestra memoria de las transiciones y en la información tenemos el argumento de capacidad.
Pero ya que solo lo usaremos una vez en realidad cuando creamos memoria y no en
el futuro Bueno, no necesitaremos especificar el argumento de capacidad.
Podríamos hacer esto pero ingresaremos directamente la cantidad de transiciones que queremos que tenga nuestra memoria.
Pero luego necesitamos un último argumento que sea obtener el parámetro en el modelo del docente.
Recuerde que este parámetro gamma es la demora.
parámetro de la ecuación y, por lo tanto, lo pondremos aquí porque lo usaremos después varias veces.
Y ese es un
Así que pongámoslo aquí.
Vamos a llamarlo Gamma.
Entonces para eso es solo el nombre del argumento y luego vamos a todos los argumentos que necesitarás para
esto en su función.
Entonces eso significa que siempre que creamos nuestro modelo de diccionario es siempre que creamos un objeto del
profesor en clase.
Bueno, tendremos que especificar como argumentos el tamaño de la entrada, el número de acción y el parámetro.
Y terminaremos con los valores reales para ellos.
Muy bien, ahora vamos a entrar en la función.
DE ACUERDO.
Entonces, básicamente, esto va a ser fácil.
Estamos a punto de crear e inicializar todas las variables que necesitamos.
Y entonces comencemos con el primero.
Comencemos con gamma.
En realidad, el coeficiente de retraso.
Entonces, como se trata de un voivoda que quiere apegarse a su objeto, comenzamos por nosotros mismos.
Entonces gamma va a ser una variable de nuestro maestro y se modelará a sí mismo que gamma es igual a los argumentos que
se ingresarán al crear un objeto de la clase de desafinación.
Entonces Janna y ahi vamos con el segundo argumento.
El segundo argumento será la ventana de recompensa.
Entonces, ¿qué es esta ventana?
deslizante de la media de las últimas 100 palabras que usará solo para evaluar la evolución del
rendimiento que sabe que tendrá el significado de la palabra en esta guerra Windu que se deslizará con el tiempo.
Bueno, esa va a ser la ventana
Y lo que queremos observar es el significado de las últimas 100 palabras que aumentan con el tiempo.
Así que vamos a inicializarlo con uno mismo que recompensa la ventana de subrayado.
Y así que esto va a ser una ventana deslizante de la media en evolución de las últimas 100 palabras.
Bueno, vamos a inicializarlo como una lista vacía y luego nos expandiremos para indicar que trabajamos horas extras.
Muy bien, entonces más emocionante.
Vamos a crear nuestra red neuronal.
Así que vamos a llamarlo Mario autodidacta porque básicamente ese es el corazón de las modelos.
Lo llamo modelo y este modelo no será más que un tema de esa clase y
creará tal objeto.
Tomamos nuestra red de clase entre paréntesis y aquí simplemente ponemos los argumentos de la clase pero ponemos estos argumentos en los
argumentos de la función init y por lo tanto solo tenemos que copiarlos aquí y
simplemente pegarlos en la clase de red y luego ir con esta línea de código.
Creamos una red neuronal para el modelo de aprendizaje perfecto, entonces creemos una memoria.
Así que de nuevo vamos a crear un nuevo Vargo que llamamos memoria autodidacta.
Y de nuevo, este va a ser un objeto de la clase de memoria de repetición.
Así que tomemos el nombre o la clase copiemos sin embargo, enfrentémoslo aquí y en algunos paréntesis tenemos que poner la
capacidad porque la capacidad es un argumento de la función y ese es el único argumento
que necesitamos aquí.
Entonces, ¿qué capacidad vamos a elegir? Recuerda que corresponde al número de transiciones al número de
eventos del último estado en el que declaraste la última acción y la última palabra.
Y así como se menciona en uno de los trabajos de Priester, vamos a tomar cien mil cien mil
transiciones en la memoria y luego tomaremos muestras de esta memoria para obtener un pequeño número de
transiciones aleatorias y en las que el modelo estará bien.
Entonces ahora tenemos nuestra memoria perfecta.
Ahora consigamos nuestro optimizador.
Así que, una vez más, creamos una nueva variable que llamamos optimizador, por lo que el optimizador es otra variable de
nuestro futuro. Dequeue un objeto que sea ese optimizador.
Y ahora si volvemos a subir podemos ver que importamos Upton torturado, que es una antorcha modular que contiene todas las herramientas para llevar a
cabo para obtener la cuadrícula en el centro.
optimizadores y le dimos el atajo Upton y, por lo tanto, lo que vamos a hacer es llevarle el
modelo, que es antorcha, depende de él y de este módulo vamos a tomar uno de los optimizadores.
Así que, por supuesto, contiene algunos
Entonces, como puede ver, todos están listados aquí.
Muchos de ellos son excelentes, por ejemplo, Propp de armadura es un excelente optimizador.
Por ejemplo, es muy recomendable para un registro de redes neuronales o aprendizaje profundo no supervisado.
Pero el otro que es excelente y que elegirá es el optimizador de átomos.
Ese es el que verá que con este obtendrá un buen auto sin conductor.
Pero de nuevo, eres totalmente bienvenido a probar otros, puedes probar el propulsor de armas, pero para metal
elegiremos a Adam.
Así que presiono enter.
Y de hecho notarás que aquí está el capitolio.
Eso es porque estamos creando un objeto de la clase Atom.
Esta es una clase pero el objeto será un optimizador de átomos en sí mismo.
Pero dado que esta es una clase, necesitamos poner algunos argumentos en los argumentos de la clase Atom
y los argumentos son todos los parámetros que pueden personalizar su y optimizador.
Entonces, por ejemplo, esa es la velocidad de aprendizaje, la disminución o algunos otros parámetros.
Y además de tomar todos los parámetros de Ormeau, especificaremos una tasa de aprendizaje.
Entonces es el comienzo de los parámetros de nuestro modelo.
Podemos obtenerlos con el modelo de duda.
Entonces ese es el modelo que creamos aquí modelo autodidacta de nuestra propia clase.
Entonces modelo autodidacta y luego para acceder a los parámetros del modelo agregamos otro punto y luego los
parámetros con algunos paréntesis muy simples.
Así que eso es solo para conectar el optimizador de complementos a nuestra red neuronal, el que creamos aquí nuevamente,
como acabamos de mencionar, vamos a agregar una tasa de aprendizaje y el argumento para esto es nuestro.
el aprendizaje no suceda demasiado rápido si obtenemos una tasa de aprendizaje demasiado grande para que la AI AI aprenda correctamente.
Y lo configuraremos igual a un valor tal que
Queremos darle a nuestra IA algún tiempo para explorar y aprender de sus errores.
Sabes cuándo lo castigamos cuando comete errores, como entrar en algún sentido o acercarse demasiado
a una pared.
Bueno, queremos dar algo de tiempo para aprender.
Queremos un camino hacia la red neuronal para la fecha correcta.
Entonces, un buen valor para la tasa de aprendizaje con la que terminé después de probar varios de ellos es 0. 2 o uno.
Está bien y eso es todo lo que necesitamos para crear un optimizador.
Entonces, básicamente estás creando un objeto de la clase Atom.
Estupendo.
Y luego las últimas tres variables que necesitamos son las variables que componen nuestros eventos de transición.
Entonces esa es la última fecha de la última acción y la última palabra.
Y eso es básicamente lo que crearemos ahora y solo tendremos que inicializarlos.
Comencemos con la última fecha, la última fecha en que la llamaremos autodidacta.
Último subrayado de estado y luego cómo vas a inicializarlo.
que la última fecha es un vector de 5 dominaciones, un vector codificado en un estado del entorno.
Bueno, recuerda
Y a modo de recordatorio, estas cinco dimensiones son las tres señales de los tres sensores que se
dejan en posición recta y derecha, y la orientación y la orientación negativa.
Entonces este es un vector y un sentido intuitivo.
Pero para la antorcha tiene que ser más que un vector.
Realmente necesita ser un tensor de antorcha.
Pero no solo necesita ser un sensor de antorcha sino que también necesita tener una dimensión más
que me gusta llamar dimensión falsa que corresponde al lote.
Y eso es porque los últimos ocho serán la entrada de la red neuronal, pero al trabajar conmigo cuando eso
funciona en general, ya sea con flujo más denso, lleva una antorcha, mientras que los vectores de entrada no pueden ser
un vector simple por sí mismo.
Tiene que estar en un lote.
La red solo puede aceptar lotes de observaciones de entrada y, por lo tanto, no solo creará un
tensor para vectores de estado de entrada sino que también crearemos esta dimensión falsa correspondiente al lote.
Así que hagámoslo y comencemos inicializando un tensor de antorcha, para hacer esto no hay nada
más simple.
Tomamos nuestra biblioteca de torche, luego dotamos y luego vamos a usar la clase de tensor porque, como habrás adivinado,
esto creará un objeto de la clase de tensor que es un objeto tensor.
Y en este tensor debemos poner un argumento que especifique el tamaño del tensor.
Puedes imaginar que te lleva como una matriz con un solo tipo.
Pero básicamente, lo que esto representará ahora es, por supuesto, este estado de entrada que puedes ver tiene un vector y
así especificar el número de elementos que la distancia debe tener.
Bueno, tenemos que usar, por supuesto, el tamaño de entrada porque el tamaño de entrada es exactamente el número de dimensiones
de nuestros vectores de estado de entrada.
Ahora debería decir tensores.
Y entonces, lo que necesitamos simplemente es ingresar en nuestra clase de tensores para crear un objeto tensor.
Bueno, eso es impreciso.
Y más adelante se cuantificará el tamaño de entrada.
De acuerdo, eso está bien.
Eso es lo primero que se hace.
Acabamos de inicializar el tensor como debería ser.
daño que usted poner en el lote será la primera vez que menciono esto digamos muy bien.
Pero recuerde que tenemos que hacer otra cosa para crear esa dimensión falsa porque esto es lo que la red
espera de sus entradas y crear esta para su examen, que por cierto tiene que ser la
primera vez que conoce el
Bien para hacer esto, simplemente tenemos que agregar eso luego, exprimir y luego encerrar entre paréntesis.
Necesitamos poner el índice de esta gran dimensión.
Y como acabo de decir que esta dimensión falsa tiene que ser la primera animación de la última fecha y dado
que los índices y bytes comenzaron en cero, necesitamos ingresar cero para que este nuevo motor de paradigma se convierta en el
motor de primera línea.
Así que tenemos un motor de primera vez que corresponde al lote y luego el diamante debe
responder a ese sensor que contendrá los cinco elementos de su entrada indica la orientación de las tres señales y
la orientación negativa.
Y luego vamos, inicializamos nuestros estados de entrada correctamente.
Perfecto.
Y luego dos variables para ir y eso va a ser mucho más fácil porque la siguiente variable es la
última acción.
Eso es un nuevo Roybal que estamos creando para Object última acción.
Y recuerda en el primer tutorial de la sección que te dije que las acciones van a
ser 0 1 o 2 y luego usando el vector de rotación de acción convertiremos estos índices de estas acciones en los
ángulos de la rotación que le recordamos a nuestro 0 20 o menos 20.
De hecho, podemos refrescar nuestra memoria con eso.
Bueno, está exactamente aquí.
Acción para la rotación si la acción es cero.
Bueno, esto corresponderá al primer índice de cero si la acción es 1.
obtendremos menos 20 grados, que será el ángulo de rotación de nuestro automóvil cuando juguemos la acción.
Esto corresponderá al índice uno de estos vectores de 20 grados y, si se trata de una acción,
Todo bien.
Y por lo tanto, dado que la acción va a ser 0 1 o 2 Bueno, la acción está ahí para un
número simple.
Y de manera muy simple, podemos inicializarlo a cero.
No necesitamos crear decenas ni escuchar nada más.
Solo tenemos que inicializarlo con cero.
Y finalmente.
Bueno, esa es la última palabra.
Es el ser esa última palabra.
Aquí vamos.
Y de nuevo, la palabra es un número flotante que recuerdo que está entre menos 1 y más 1.
Entonces ese es el número otra vez.
Y en cuanto a la acción.
Lo inicializaremos a cero y luego iremos.
Felicitaciones, la función está lista.
Así que ahora estamos listos para pasar a las cosas emocionantes.
Y, de hecho, lo más importante para AI es decidir qué acción ejecutar en cada momento y cada tanty.
Y eso es exactamente lo que vamos a hacer en el próximo tutorial al crear el método de acción selectivo.
Así que hagamos esto en el siguiente trabajo y hasta entonces.