WEBVTT

00:00.520 --> 00:02.690
Hola y bienvenidos a este tutorial de Python.

00:02.860 --> 00:05.680
De acuerdo, tenemos un terreno muy emocionante por delante.

00:05.680 --> 00:10.690
Comenzaremos por crear la arquitectura de la red neuronal, es decir, crearemos la red neuronal

00:10.690 --> 00:16.740
que estará en el corazón de nuestra IA y que devolverá la acción para jugar a los 90 años.

00:16.930 --> 00:18.060
Entonces, hagamos esto.

00:18.130 --> 00:23.130
Entonces, como queremos que nuestra red neuronal sea objetiva, vamos a hacer que sea una clase.

00:23.200 --> 00:25.100
Y eso es porque es mucho más conveniente.

00:25.180 --> 00:28.370
Sabes que la clase es el modelo de algo que queremos construir.

00:28.540 --> 00:34.000
Queremos construir una red neuronal y tenemos que hacer algún tipo de instrucciones que se incluirán

00:34.090 --> 00:35.080
en la clase.

00:35.140 --> 00:37.910
Y en esta clase vamos a hacer dos funciones.

00:37.960 --> 00:42.810
Primero, la función init, que es la función que aparece todo el tiempo al crear clases.

00:43.000 --> 00:47.770
Y eso básicamente define la variable de su objeto que es la red neuronal.

00:47.920 --> 00:52.600
Conoces las variables asociadas al objeto en lugar de las variables globales.

00:52.840 --> 00:57.910
que definirá la arquitectura de la nueva red que usted conoce definiendo la capa de entrada que

00:57.910 --> 01:03.460
estará compuesta por cinco neuronas de entrada porque tenemos cinco dimensiones para el vector codificado de los estados de entrada.

01:03.790 --> 01:05.680
Y así es en esta función

01:05.890 --> 01:08.080
Luego definiremos algunas capas ocultas.

01:08.110 --> 01:12.940
Tal vez comiences con una capa oculta y luego serás bienvenido a probar algunas otras arquitecturas de

01:12.940 --> 01:13.920
la red neuronal.

01:14.200 --> 01:20.080
Y luego, por supuesto, terminaremos con la capa de salida que contendrá las posibles acciones que

01:20.110 --> 01:21.940
podemos ejecutar en cada momento.

01:22.180 --> 01:24.730
Entonces eso es exactamente lo que haremos en esta función.

01:24.850 --> 01:30.460
función de reenvío y esa será la función que activará las neuronas en la red neuronal.

01:30.460 --> 01:34.870
Y luego haremos otra función dentro de la clase que será la

01:34.870 --> 01:40.570
Usted sabe que esto activará las señales y entonces usaremos una función de activación rectificada porque,

01:40.570 --> 01:46.920
por supuesto, estamos tratando con un problema puramente no lineal y esta función rectificada rompe la linealidad.

01:47.200 --> 01:53.340
Pero sobre todo estamos haciendo que esta función de Ford devuelva los valores q que son las salidas de la red.

01:53.500 --> 01:56.110
Pero tenemos un valor clave para cada acción.

01:56.200 --> 02:02.710
Y más tarde devolveremos la acción final ya sea tomando el máximo de los valores clave o usando un

02:02.710 --> 02:03.880
método Max suave.

02:04.030 --> 02:05.270
Veremos eso luego.

02:05.440 --> 02:10.330
Entonces en este tutorial vamos a comenzar implementando la función init y

02:10.330 --> 02:12.880
luego el siguiente implementará la función forward.

02:12.880 --> 02:13.810
Entonces, hagamos esto.

02:13.810 --> 02:17.060
Primero tenemos que presentar nuestra clase.

02:17.200 --> 02:22.930
Entonces comenzamos con clase y le damos un nombre a nuestra clase, que es donde podemos llamarlo red.

02:23.650 --> 02:29.980
Y luego en esta clase de red voy a utilizar una técnica de programación de objetos que se llama

02:30.310 --> 02:35.120
herencia y que es solo heredar de todas las herramientas de una clase principal.

02:35.200 --> 02:41.550
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.

02:41.770 --> 02:44.110
Y ese módulo.

02:44.470 --> 02:50.790
Así que eso es solo heredar de todas las herramientas de esta clase de módulo, que por supuesto las herramientas para

02:50.790 --> 02:51.940
implementar una red neuronal.

02:51.940 --> 02:57.880
Entonces ese es un truco muy poderoso y evolutivo en la programación orientada a objetos que va heredando.

02:57.910 --> 03:02.670
Y ahora estamos heredando de esta clase de padres de módulo.

03:02.800 --> 03:06.000
Está bien y ahora estamos listos para entrar a la clase.

03:06.130 --> 03:12.910
Así que presionaré ingresar dos veces en realidad porque haremos dos funciones y comenzaremos con

03:13.140 --> 03:14.280
la función final.

03:14.350 --> 03:20.470
Entonces, la función init debemos nombrarla de esta manera con dos en este curso y luego en ella.

03:20.650 --> 03:25.750
Y nuevamente, para subrayar, eso es solo la sintaxis de Python, que es exactamente como tenemos que hacerlo.

03:25.930 --> 03:28.460
Y luego tenemos que poner los argumentos.

03:28.720 --> 03:30.340
Entonces tenemos tres argumentos.

03:30.340 --> 03:35.800
El primero es un argumento obligatorio que en realidad es uno mismo y uno mismo.

03:35.800 --> 03:42.250
No hay ningún misterio al respecto que se refiera al objeto que se creará a partir de esta clase que estamos a punto

03:42.250 --> 03:42.810
de hacer.

03:42.820 --> 03:44.400
Sabes que estamos haciendo esta clase.

03:44.470 --> 03:48.980
Es como algunas instrucciones de algún modelo de esta red neuronal que queremos construir.

03:49.180 --> 03:53.620
Y una vez que la clase esté lista, podemos hacer tantos con las redes como queramos.

03:53.620 --> 04:00.130
Y cada una de estas nuevas redes será un objeto de esta clase y dado que utilizaremos

04:00.400 --> 04:07.630
el objeto para otros fines, necesitamos hacerlo, pero ¿cuáles son las variables del objeto? Y para Spudis lo

04:07.630 --> 04:11.900
estamos utilizando aquí para especificar que se está refiriendo al objeto.

04:12.100 --> 04:18.430
Entonces, cuando quiera usar disponible de mi objeto, usaré self antes de la variable para especificar

04:18.430 --> 04:21.340
que esta es una variable del objeto.

04:21.340 --> 04:25.680
son, por supuesto, el número de neuronas de entrada y el número de neuronas de salida.

04:25.680 --> 04:30.240
Muy bien, así que ese es el primer argumento y luego tenemos otros dos argumentos que

04:30.550 --> 04:38.220
Así que el número de neuronas de entrada lo llamaremos tamaño de entrada y eso es en realidad

04:38.310 --> 04:45.890
cinco porque nuestros vectores de entrada tienen cinco dimensiones a tres señales más orientación más orientación negativa

04:45.900 --> 04:51.020
que son vectores de valores codificados que describen un estado del entorno.

04:51.210 --> 04:54.960
Estos cinco valores son suficientes para describir un estado del medio ambiente.

04:54.960 --> 05:00.600
Podríamos haber pensado en Menos valores o más valores, pero eso es lo que probé y en realidad tiene sentido porque

05:00.600 --> 05:05.520
en realidad necesitamos una señal de la que está delante de nosotros y la otra a la derecha.

05:05.520 --> 05:10.860
esta orientación y menos orientación hacia usted. saber hacer un seguimiento del objetivo que intentabas alcanzar.

05:10.860 --> 05:17.370
Cuando conducimos un automóvil, podríamos haber optado por una señal de 360º, como las señales en la parte superior de

05:17.400 --> 05:22.200
los automóviles de Google, que podemos autodirigir totalmente con tres sensores y luego tenemos

05:22.530 --> 05:29.160
Y luego tenemos, por supuesto, las neuronas de salida de nuestra red que corresponden a las acciones y tenemos tres acciones

05:29.160 --> 05:32.840
posibles yendo a la izquierda yendo derecho o yendo a la derecha.

05:32.880 --> 05:38.520
Y por lo tanto voy a llamarlo y la acción y habrá tres de ellos.

05:38.520 --> 05:39.030
Todo bien.

05:39.120 --> 05:44.850
Hasta ahora solo tenemos que dar nombres a las entradas y luego usaremos estas bolas de voleibol para hacer las condiciones

05:44.940 --> 05:46.140
dentro de la red neuronal.

05:47.090 --> 05:55.010
Muy bien, entonces, y empiezas usando otro truco de antorcha, este truco es una superfunción que

05:55.010 --> 05:59.310
es una función que realmente hereda del módulo.

05:59.390 --> 06:02.730
Entonces, es por eso que tuvimos que usar la herencia para heredar el módulo también.

06:02.750 --> 06:04.440
Este es el primero en usar.

06:04.520 --> 06:11.120
Y, básicamente, solo estamos usando esta superfunción súper truco para poder usar las herramientas del módulo que

06:11.580 --> 06:13.320
es mucho más eficiente.

06:13.670 --> 06:18.620
Y dentro de la superfunción solo necesito especificar primero la red.

06:18.650 --> 06:25.100
chul de red que conoces porque hereda de la clase principal del módulo y luego de nuestro objeto.

06:25.550 --> 06:27.360
Esa es nuestra clase de

06:27.380 --> 06:35.220
Y luego solo agrego eso y estoy en una función como esta exactamente como la llamamos.

06:35.570 --> 06:39.350
Está bien, así que es solo un truco que es solo usar todas las herramientas que tengo.

06:39.360 --> 06:46.270
Y en ese módulo, podemos pasar al siguiente paso, que es especificar la capa de entrada.

06:46.550 --> 06:53.300
Entonces, básicamente, lo que tengo que hacer es introducir una nueva variable que se adjuntará al objeto

06:53.300 --> 06:57.120
y esta variable contendrá el número de neuronas de entrada.

06:57.170 --> 07:05.140
Entonces, no confundirlo con el tamaño de entrada del tamaño de entrada es el argumento de la función final.

07:05.180 --> 07:09.710
no es la variable que se adjunta al objeto aún la variable que se adjunta al objeto.

07:09.710 --> 07:10.360
Pero esa

07:10.520 --> 07:16.520
Bueno, como acabo de mencionar, necesitamos especificar que, en cambio, está adjuntado al objeto, así que usamos

07:17.230 --> 07:22.130
uno autodidacta y ahora damos un nombre a esta primera variable adjunta al objeto.

07:22.190 --> 07:24.870
Y entonces podemos simplemente dar el mismo nombre que la entrada.

07:24.920 --> 07:33.650
Podemos llamarlo tamaño de entrada y diremos que es igual a los argumentos una función que tiene el tamaño de entrada.

07:33.680 --> 07:34.080
Todo bien.

07:34.130 --> 07:39.900
Cada vez que estoy creando un objeto de la clase de red y estoy especificando el tamaño de entrada como,

07:39.900 --> 07:41.170
por ejemplo, pongo 5.

07:41.180 --> 07:47.330
Aquí habrá 5 y, por lo tanto, la variable de tamaño de entrada de nuestro objeto tendrá el valor de

07:47.690 --> 07:54.110
5 porque este tamaño de entrada será 5 y, por lo tanto, nuestra nueva red tendrá 5 neuronas de entrada en

07:54.110 --> 07:55.470
la capa de entrada.

07:55.490 --> 07:55.790
Todo bien.

07:55.790 --> 08:02.180
Y luego es lo mismo para la otra variable que queremos adjuntar a los objetos.

08:02.210 --> 08:08.100
Y como habrás adivinado, esta va a ser una variable para el número de neuronas de salida.

08:08.330 --> 08:15.030
Y decir que tomamos nuestro objeto y luego damos un nombre a esta segunda variable del objeto

08:15.040 --> 08:17.740
que vamos a llamar y la acción.

08:18.170 --> 08:23.600
Y esto será igual a este argumento aquí dado el número de acciones que es el número de neuronas

08:23.600 --> 08:24.250
de salida.

08:24.530 --> 08:30.850
Y así lo establecemos igual a la acción en realidad y la acción será igual a tres.

08:30.890 --> 08:37.930
Por lo tanto, la variable y la acción asociada a nuestro objeto a una red obtendrán el valor de tres.

08:38.240 --> 08:41.680
De hecho, podemos ver una advertencia aquí dice nombre indefinido.

08:41.720 --> 08:44.180
Y bueno, eso es porque aquí usamos el.

08:44.230 --> 08:46.030
Y luego atajo.

08:46.350 --> 08:48.530
Y necesitamos usar un atajo aquí.

08:48.590 --> 08:52.780
Y para nuestro inicio de torche y en Mudgal, desaparecerá.

08:52.880 --> 08:53.670
Aquí vamos.

08:53.690 --> 08:54.580
Perfecto.

08:54.590 --> 09:00.800
En este momento tenemos nuevas advertencias, todas las advertencias aquí son solo para especificar que lo que importamos aún no

09:00.800 --> 09:01.520
se usa.

09:01.580 --> 09:04.660
Está bien, los usaremos luego.

09:04.670 --> 09:10.010
Muy bien, entonces tenemos otras dos variables que queremos definir para el objeto.

09:10.190 --> 09:15.820
la conexión completa de las conexiones completas entre las diferentes capas de nuestra red neuronal.

09:15.830 --> 09:16.810
Y esta será

09:16.820 --> 09:21.800
Entonces, como en este momento queremos hacer una red neuronal compuesta de una sola cabeza en su

09:21.800 --> 09:23.440
mundo, habrá dos conexiones completas.

09:23.570 --> 09:27.740
Habrá una primera conexión completa entre la capa de entrada y la capa oculta.

09:27.980 --> 09:32.450
Y una segunda conexión completa entre la colina allí y la capa de salida.

09:32.480 --> 09:34.770
Comencemos con la primera conexión completa.

09:34.890 --> 09:43.310
Vamos a llamarlo SE1 Y de nuevo utilizo self aquí para especificar que FC one es una variable de mi objeto para

09:43.780 --> 09:44.530
resolver eso.

09:44.530 --> 09:47.490
FC uno que será igual a.

09:47.630 --> 09:55.160
Y ahora usamos el N en el módulo y vamos a usar una función llamada R lineal y eso es

09:55.160 --> 10:02.080
exactamente para hacer esta conexión completa entre las neuronas y la capa de entrada a las neuronas ocultas allí.

10:02.180 --> 10:04.090
Y a qué me refiero con una conexión completa.

10:04.160 --> 10:09.190
Eso significa que todas las neuronas de la capa de entrada estarán conectadas a todas las neuronas

10:09.190 --> 10:09.920
del Aquí adentro.

10:10.190 --> 10:16.140
Y para hacer esta conexión usamos esta función lineal a la cual necesitamos poner algunos argumentos.

10:16.190 --> 10:19.880
Y como pueden ver, estos argumentos están en las características.

10:19.880 --> 10:25.370
Entonces, ese es el número de neuronas de la primera ley que desea conectar, características que es el número de

10:25.370 --> 10:30.110
neuronas de la segunda capa que desea conectar, que es la capa de la derecha que es

10:30.110 --> 10:32.360
la capa oculta y la bicicleta es verdadera.

10:32.420 --> 10:38.850
Entonces, la verdad es que la bicicleta mantendrá el valor predeterminado que es para tener un sesgo y no solo un poco

10:38.900 --> 10:43.350
de peso asociado a la ejecución, tendremos que esperar y un sesgo para cada capa.

10:43.610 --> 10:46.140
Y tan bien veamos qué necesitamos para ingresar.

10:46.280 --> 10:51.850
Entonces, el primer argumento en características es el número de neuronas de entrada en la capa de entrada.

10:52.000 --> 10:52.930
Y entonces, ¿dónde está?

10:53.030 --> 10:55.080
Bueno, eso es realmente impreciso.

10:55.100 --> 11:01.930
Ese es el argumento de nuestra función init, que más adelante podremos combatir la orientación de las tres señales

11:02.200 --> 11:04.150
y la orientación de Mannus.

11:04.160 --> 11:05.020
Así que, aquí vamos.

11:05.190 --> 11:14.300
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

11:14.300 --> 11:17.090
que queremos tener en la segunda capa.

11:17.180 --> 11:20.450
La segunda capa que estará completamente conectada a la primera capa.

11:20.450 --> 11:24.960
Y ahora la pregunta es cuántas neuronas queremos en esta capa oculta.

11:25.220 --> 11:27.420
Bueno, hice un montón de entrenamiento de parámetros.

11:27.440 --> 11:29.110
Hice mucha experimentación.

11:29.210 --> 11:31.940
Eso es lo que hacemos o eso es lo que hacemos más profundo.

11:31.940 --> 11:38.270
En general, hacemos mucha experimentación para ver cuál sería la mejor red neuronal para nuestro

11:38.270 --> 11:39.170
problema específico.

11:39.170 --> 11:45.950
Así que probé muchos valores y terminé eligiendo 30 30 carreras en una capa oculta y verá que con este

11:45.950 --> 11:50.750
número obtendremos algunos resultados bastante buenos, pero luego puede cambiar la arquitectura de la

11:50.750 --> 11:51.580
red neuronal.

11:51.580 --> 11:53.120
Siéntase libre de jugar con eso.

11:53.180 --> 11:58.730
No solo puedes cambiar el número de neuronas en el aquí y el allá, sino que también puedes agregar algunas

11:59.150 --> 12:05.000
capas más para que puedas obtener un auto aún mejor, pero 30 neuronas hinnas nos proporcionarán una buena red neuronal y

12:05.000 --> 12:06.000
una buena causa.

12:06.020 --> 12:07.390
Así que eso es lo que buscamos.

12:07.520 --> 12:08.410
Y ahí vamos.

12:08.420 --> 12:13.500
Tenemos nuestra primera conexión completa realmente con esta función lineal.

12:13.520 --> 12:16.910
Hacemos la conexión entre la capa de entrada y la pierna oculta.

12:17.360 --> 12:23.270
Y ahora es el momento de hacer la segunda conexión completa que es la conexión completa entre la capa oculta

12:23.600 --> 12:25.180
y la capa de salida.

12:25.490 --> 12:26.750
Entonces ahí vamos

12:26.750 --> 12:31.380
Vamos a llamar a esta segunda conexión completa en C2.

12:31.490 --> 12:32.280
Aquí vamos.

12:32.360 --> 12:36.400
Y todavía está disponible para más objetos usando Saphir.

12:36.650 --> 12:38.330
Y luego nuevamente usamos.

12:38.450 --> 12:45.310
Bueno, en realidad podemos copiar esto porque vamos a usar el N en el módulo y luego la función lineal.

12:45.530 --> 12:49.250
Pero luego tenemos que cambiar los argumentos de curso primero.

12:49.280 --> 12:55.050
Es lo mismo primero es la cantidad de neuronas que tendremos en la primera capa de la conexión.

12:55.190 --> 12:56.510
Así que eso es lo escondido allí.

12:56.720 --> 13:03.810
Y por lo tanto, eso es 30 y luego el segundo argumento es el número de neuronas en la segunda capa de

13:04.010 --> 13:08.810
la conexión y eso corresponde a la capa de salida y la salida que tiene.

13:08.980 --> 13:15.020
Y las neuronas reales que más tarde serán tres porque tenemos tres acciones posibles, pero hasta ahora tenemos

13:15.020 --> 13:16.930
que usar los nombres que definimos.

13:17.050 --> 13:23.990
nombre del argumento de la función init y, por lo tanto, ingresamos aquí y la acción, y ahí vamos.

13:23.990 --> 13:24.950
Ese es el

13:24.950 --> 13:27.760
En primer lugar, nuestras conexiones tuple re.

13:27.920 --> 13:30.980
Y lo segundo de todo es cualquier función Israel.

13:31.400 --> 13:36.940
Así que eso es lo que vamos a inicializar nuestro objeto cada vez que creamos un objeto de la clase de red.

13:37.130 --> 13:44.300
Y tan pronto como creamos bien un objeto, todas estas variables para variables aquí ingresan tamaño y reacción.

13:44.380 --> 13:46.980
Usted un y dos serán definidos.

13:47.180 --> 13:52.060
Y así es como obtendremos la arquitectura de nuestra red animal para cada objeto que creamos.

13:52.160 --> 13:59.450
corresponderá a una red neuronal de cinco neuronas de entrada 30 neuronas ocultas y tres neuronas de salida.

13:59.450 --> 14:00.440
Cada objeto

14:00.470 --> 14:01.430
Entonces ahí vamos

14:01.430 --> 14:06.980
Hemos terminado con esta primera función y ahora podemos pasar a la segunda función, que es la función

14:06.980 --> 14:13.100
de reenvío y que se usará para activar las neuronas en la red neuronal utilizando la función de activación del

14:13.100 --> 14:19.500
rectificador y, en su mayoría, para regresar finalmente a valores de cubo que son las salidas de una sola red.

14:19.580 --> 14:23.420
Así que no puedo esperar para hacer esto en el próximo tutorial y hasta entonces.
