Hola y bienvenidos a este tutorial de Python.
De acuerdo, tenemos un terreno muy emocionante por delante.
Comenzaremos por crear la arquitectura de la red neuronal, es decir, crearemos la red neuronal
que estará en el corazón de nuestra IA y que devolverá la acción para jugar a los 90 años.
Entonces, hagamos esto.
Entonces, como queremos que nuestra red neuronal sea objetiva, vamos a hacer que sea una clase.
Y eso es porque es mucho más conveniente.
Sabes que la clase es el modelo de algo que queremos construir.
Queremos construir una red neuronal y tenemos que hacer algún tipo de instrucciones que se incluirán
en la clase.
Y en esta clase vamos a hacer dos funciones.
Primero, la función init, que es la función que aparece todo el tiempo al crear clases.
Y eso básicamente define la variable de su objeto que es la red neuronal.
Conoces las variables asociadas al objeto en lugar de las variables globales.
que definirá la arquitectura de la nueva red que usted conoce definiendo la capa de entrada que
estará compuesta por cinco neuronas de entrada porque tenemos cinco dimensiones para el vector codificado de los estados de entrada.
Y así es en esta función
Luego definiremos algunas capas ocultas.
Tal vez comiences con una capa oculta y luego serás bienvenido a probar algunas otras arquitecturas de
la red neuronal.
Y luego, por supuesto, terminaremos con la capa de salida que contendrá las posibles acciones que
podemos ejecutar en cada momento.
Entonces eso es exactamente lo que haremos en esta función.
función de reenvío y esa será la función que activará las neuronas en la red neuronal.
Y luego haremos otra función dentro de la clase que será la
Usted sabe que esto activará las señales y entonces usaremos una función de activación rectificada porque,
por supuesto, estamos tratando con un problema puramente no lineal y esta función rectificada rompe la linealidad.
Pero sobre todo estamos haciendo que esta función de Ford devuelva los valores q que son las salidas de la red.
Pero tenemos un valor clave para cada acción.
Y más tarde devolveremos la acción final ya sea tomando el máximo de los valores clave o usando un
método Max suave.
Veremos eso luego.
Entonces en este tutorial vamos a comenzar implementando la función init y
luego el siguiente implementará la función forward.
Entonces, hagamos esto.
Primero tenemos que presentar nuestra clase.
Entonces comenzamos con clase y le damos un nombre a nuestra clase, que es donde podemos llamarlo red.
Y luego en esta clase de red voy a utilizar una técnica de programación de objetos que se llama
herencia y que es solo heredar de todas las herramientas de una clase principal.
Entonces nuestra clase de red que estamos a punto de hacer es una prueba para niños de una clase más grande que es.
Y ese módulo.
Así que eso es solo heredar de todas las herramientas de esta clase de módulo, que por supuesto las herramientas para
implementar una red neuronal.
Entonces ese es un truco muy poderoso y evolutivo en la programación orientada a objetos que va heredando.
Y ahora estamos heredando de esta clase de padres de módulo.
Está bien y ahora estamos listos para entrar a la clase.
Así que presionaré ingresar dos veces en realidad porque haremos dos funciones y comenzaremos con
la función final.
Entonces, la función init debemos nombrarla de esta manera con dos en este curso y luego en ella.
Y nuevamente, para subrayar, eso es solo la sintaxis de Python, que es exactamente como tenemos que hacerlo.
Y luego tenemos que poner los argumentos.
Entonces tenemos tres argumentos.
El primero es un argumento obligatorio que en realidad es uno mismo y uno mismo.
No hay ningún misterio al respecto que se refiera al objeto que se creará a partir de esta clase que estamos a punto
de hacer.
Sabes que estamos haciendo esta clase.
Es como algunas instrucciones de algún modelo de esta red neuronal que queremos construir.
Y una vez que la clase esté lista, podemos hacer tantos con las redes como queramos.
Y cada una de estas nuevas redes será un objeto de esta clase y dado que utilizaremos
el objeto para otros fines, necesitamos hacerlo, pero ¿cuáles son las variables del objeto? Y para Spudis lo
estamos utilizando aquí para especificar que se está refiriendo al objeto.
Entonces, cuando quiera usar disponible de mi objeto, usaré self antes de la variable para especificar
que esta es una variable del objeto.
son, por supuesto, el número de neuronas de entrada y el número de neuronas de salida.
Muy bien, así que ese es el primer argumento y luego tenemos otros dos argumentos que
Así que el número de neuronas de entrada lo llamaremos tamaño de entrada y eso es en realidad
cinco porque nuestros vectores de entrada tienen cinco dimensiones a tres señales más orientación más orientación negativa
que son vectores de valores codificados que describen un estado del entorno.
Estos cinco valores son suficientes para describir un estado del medio ambiente.
Podríamos haber pensado en Menos valores o más valores, pero eso es lo que probé y en realidad tiene sentido porque
en realidad necesitamos una señal de la que está delante de nosotros y la otra a la derecha.
esta orientación y menos orientación hacia usted. saber hacer un seguimiento del objetivo que intentabas alcanzar.
Cuando conducimos un automóvil, podríamos haber optado por una señal de 360º, como las señales en la parte superior de
los automóviles de Google, que podemos autodirigir totalmente con tres sensores y luego tenemos
Y luego tenemos, por supuesto, las neuronas de salida de nuestra red que corresponden a las acciones y tenemos tres acciones
posibles yendo a la izquierda yendo derecho o yendo a la derecha.
Y por lo tanto voy a llamarlo y la acción y habrá tres de ellos.
Todo bien.
Hasta ahora solo tenemos que dar nombres a las entradas y luego usaremos estas bolas de voleibol para hacer las condiciones
dentro de la red neuronal.
Muy bien, entonces, y empiezas usando otro truco de antorcha, este truco es una superfunción que
es una función que realmente hereda del módulo.
Entonces, es por eso que tuvimos que usar la herencia para heredar el módulo también.
Este es el primero en usar.
Y, básicamente, solo estamos usando esta superfunción súper truco para poder usar las herramientas del módulo que
es mucho más eficiente.
Y dentro de la superfunción solo necesito especificar primero la red.
chul de red que conoces porque hereda de la clase principal del módulo y luego de nuestro objeto.
Esa es nuestra clase de
Y luego solo agrego eso y estoy en una función como esta exactamente como la llamamos.
Está bien, así que es solo un truco que es solo usar todas las herramientas que tengo.
Y en ese módulo, podemos pasar al siguiente paso, que es especificar la capa de entrada.
Entonces, básicamente, lo que tengo que hacer es introducir una nueva variable que se adjuntará al objeto
y esta variable contendrá el número de neuronas de entrada.
Entonces, no confundirlo con el tamaño de entrada del tamaño de entrada es el argumento de la función final.
no es la variable que se adjunta al objeto aún la variable que se adjunta al objeto.
Pero esa
Bueno, como acabo de mencionar, necesitamos especificar que, en cambio, está adjuntado al objeto, así que usamos
uno autodidacta y ahora damos un nombre a esta primera variable adjunta al objeto.
Y entonces podemos simplemente dar el mismo nombre que la entrada.
Podemos llamarlo tamaño de entrada y diremos que es igual a los argumentos una función que tiene el tamaño de entrada.
Todo bien.
Cada vez que estoy creando un objeto de la clase de red y estoy especificando el tamaño de entrada como,
por ejemplo, pongo 5.
Aquí habrá 5 y, por lo tanto, la variable de tamaño de entrada de nuestro objeto tendrá el valor de
5 porque este tamaño de entrada será 5 y, por lo tanto, nuestra nueva red tendrá 5 neuronas de entrada en
la capa de entrada.
Todo bien.
Y luego es lo mismo para la otra variable que queremos adjuntar a los objetos.
Y como habrás adivinado, esta va a ser una variable para el número de neuronas de salida.
Y decir que tomamos nuestro objeto y luego damos un nombre a esta segunda variable del objeto
que vamos a llamar y la acción.
Y esto será igual a este argumento aquí dado el número de acciones que es el número de neuronas
de salida.
Y así lo establecemos igual a la acción en realidad y la acción será igual a tres.
Por lo tanto, la variable y la acción asociada a nuestro objeto a una red obtendrán el valor de tres.
De hecho, podemos ver una advertencia aquí dice nombre indefinido.
Y bueno, eso es porque aquí usamos el.
Y luego atajo.
Y necesitamos usar un atajo aquí.
Y para nuestro inicio de torche y en Mudgal, desaparecerá.
Aquí vamos.
Perfecto.
En este momento tenemos nuevas advertencias, todas las advertencias aquí son solo para especificar que lo que importamos aún no
se usa.
Está bien, los usaremos luego.
Muy bien, entonces tenemos otras dos variables que queremos definir para el objeto.
la conexión completa de las conexiones completas entre las diferentes capas de nuestra red neuronal.
Y esta será
Entonces, como en este momento queremos hacer una red neuronal compuesta de una sola cabeza en su
mundo, habrá dos conexiones completas.
Habrá una primera conexión completa entre la capa de entrada y la capa oculta.
Y una segunda conexión completa entre la colina allí y la capa de salida.
Comencemos con la primera conexión completa.
Vamos a llamarlo SE1 Y de nuevo utilizo self aquí para especificar que FC one es una variable de mi objeto para
resolver eso.
FC uno que será igual a.
Y ahora usamos el N en el módulo y vamos a usar una función llamada R lineal y eso es
exactamente para hacer esta conexión completa entre las neuronas y la capa de entrada a las neuronas ocultas allí.
Y a qué me refiero con una conexión completa.
Eso significa que todas las neuronas de la capa de entrada estarán conectadas a todas las neuronas
del Aquí adentro.
Y para hacer esta conexión usamos esta función lineal a la cual necesitamos poner algunos argumentos.
Y como pueden ver, estos argumentos están en las características.
Entonces, ese es el número de neuronas de la primera ley que desea conectar, características que es el número de
neuronas de la segunda capa que desea conectar, que es la capa de la derecha que es
la capa oculta y la bicicleta es verdadera.
Entonces, la verdad es que la bicicleta mantendrá el valor predeterminado que es para tener un sesgo y no solo un poco
de peso asociado a la ejecución, tendremos que esperar y un sesgo para cada capa.
Y tan bien veamos qué necesitamos para ingresar.
Entonces, el primer argumento en características es el número de neuronas de entrada en la capa de entrada.
Y entonces, ¿dónde está?
Bueno, eso es realmente impreciso.
Ese es el argumento de nuestra función init, que más adelante podremos combatir la orientación de las tres señales
y la orientación de Mannus.
Así que, aquí vamos.
Cuando los primeros argumentos y el tamaño puesto y luego el segundo argumento son las características, es decir, el número de neuronas
que queremos tener en la segunda capa.
La segunda capa que estará completamente conectada a la primera capa.
Y ahora la pregunta es cuántas neuronas queremos en esta capa oculta.
Bueno, hice un montón de entrenamiento de parámetros.
Hice mucha experimentación.
Eso es lo que hacemos o eso es lo que hacemos más profundo.
En general, hacemos mucha experimentación para ver cuál sería la mejor red neuronal para nuestro
problema específico.
Así que probé muchos valores y terminé eligiendo 30 30 carreras en una capa oculta y verá que con este
número obtendremos algunos resultados bastante buenos, pero luego puede cambiar la arquitectura de la
red neuronal.
Siéntase libre de jugar con eso.
No solo puedes cambiar el número de neuronas en el aquí y el allá, sino que también puedes agregar algunas
capas más para que puedas obtener un auto aún mejor, pero 30 neuronas hinnas nos proporcionarán una buena red neuronal y
una buena causa.
Así que eso es lo que buscamos.
Y ahí vamos.
Tenemos nuestra primera conexión completa realmente con esta función lineal.
Hacemos la conexión entre la capa de entrada y la pierna oculta.
Y ahora es el momento de hacer la segunda conexión completa que es la conexión completa entre la capa oculta
y la capa de salida.
Entonces ahí vamos
Vamos a llamar a esta segunda conexión completa en C2.
Aquí vamos.
Y todavía está disponible para más objetos usando Saphir.
Y luego nuevamente usamos.
Bueno, en realidad podemos copiar esto porque vamos a usar el N en el módulo y luego la función lineal.
Pero luego tenemos que cambiar los argumentos de curso primero.
Es lo mismo primero es la cantidad de neuronas que tendremos en la primera capa de la conexión.
Así que eso es lo escondido allí.
Y por lo tanto, eso es 30 y luego el segundo argumento es el número de neuronas en la segunda capa de
la conexión y eso corresponde a la capa de salida y la salida que tiene.
Y las neuronas reales que más tarde serán tres porque tenemos tres acciones posibles, pero hasta ahora tenemos
que usar los nombres que definimos.
nombre del argumento de la función init y, por lo tanto, ingresamos aquí y la acción, y ahí vamos.
Ese es el
En primer lugar, nuestras conexiones tuple re.
Y lo segundo de todo es cualquier función Israel.
Así que eso es lo que vamos a inicializar nuestro objeto cada vez que creamos un objeto de la clase de red.
Y tan pronto como creamos bien un objeto, todas estas variables para variables aquí ingresan tamaño y reacción.
Usted un y dos serán definidos.
Y así es como obtendremos la arquitectura de nuestra red animal para cada objeto que creamos.
corresponderá a una red neuronal de cinco neuronas de entrada 30 neuronas ocultas y tres neuronas de salida.
Cada objeto
Entonces ahí vamos
Hemos terminado con esta primera función y ahora podemos pasar a la segunda función, que es la función
de reenvío y que se usará para activar las neuronas en la red neuronal utilizando la función de activación del
rectificador y, en su mayoría, para regresar finalmente a valores de cubo que son las salidas de una sola red.
Así que no puedo esperar para hacer esto en el próximo tutorial y hasta entonces.