WEBVTT

00:00.520 --> 00:02.690
Olá e bem vindo a este tutorial do Python.

00:02.860 --> 00:05.680
Tudo bem, então temos muito emocionante para o solo à nossa frente.

00:05.680 --> 00:10.690
Vamos começar criando a arquitetura da rede neural que será a rede neural

00:10.690 --> 00:16.740
que estará no coração da nossa AI e que irá retornar a ação aos 90 anos.

00:16.930 --> 00:18.060
Então vamos fazer isso.

00:18.130 --> 00:23.130
Então, como queremos que a nossa rede neural seja objetiva, vamos fazer uma aula.

00:23.200 --> 00:25.100
E é porque é muito mais conveniente.

00:25.180 --> 00:28.370
Você sabe que a classe é o modelo de algo que queremos construir.

00:28.540 --> 00:34.000
Queremos construir uma rede neural e precisamos fazer algum tipo de instruções que serão todas

00:34.090 --> 00:35.080
contidas na classe.

00:35.140 --> 00:37.910
E nesta classe vamos fazer duas funções.

00:37.960 --> 00:42.810
Primeiro, a função de init que é a função que surge o tempo todo ao fazer a classe.

00:43.000 --> 00:47.770
E isso basicamente define a variável do seu objeto que é a rede neural.

00:47.920 --> 00:52.600
Você conhece as variáveis ​​anexadas ao objeto em oposição às variáveis ​​globais.

00:52.840 --> 00:57.910
definirá a arquitetura da nova rede que você conhece definindo a camada de entrada que será

00:57.910 --> 01:03.460
composta de cinco neurônios de entrada porque temos cinco dimensões para o vetor codificado de estados de entrada.

01:03.790 --> 01:05.680
E isso é nesta função que

01:05.890 --> 01:08.080
Então vamos definir algumas camadas ocultas.

01:08.110 --> 01:12.940
Talvez você comece com uma camada oculta e então você será bem-vindo para tentar algumas outras arquiteturas

01:12.940 --> 01:13.920
da rede neural.

01:14.200 --> 01:20.080
E, claro, acabaremos com a camada de saída que conterá as possíveis ações que

01:20.110 --> 01:21.940
podemos desempenhar em cada momento.

01:22.180 --> 01:24.730
Então é exatamente isso que faremos nesta função.

01:24.850 --> 01:30.460
a função direta e essa será a função que ativará os neurônios na rede neural.

01:30.460 --> 01:34.870
E então faremos outra função ainda dentro da classe, que será

01:34.870 --> 01:40.570
Você sabe que isso ativará os sinais e, portanto, usaremos uma função de ativação rectificada

01:40.570 --> 01:46.920
porque, claro, estamos lidando com um problema puramente não linear e essa função corrigida quebra a linearidade.

01:47.200 --> 01:53.340
Mas, principalmente, estamos fazendo essa função da Ford para retornar os valores de q que são as saídas da rede.

01:53.500 --> 01:56.110
Mas temos um valor-chave para cada ação.

01:56.200 --> 02:02.710
E mais tarde, retornaremos a ação final tomando o máximo dos valores-chave ou usando um

02:02.710 --> 02:03.880
método Max suave.

02:04.030 --> 02:05.270
Veremos isso depois.

02:05.440 --> 02:10.330
Então, neste tutorial, vamos começar por implementar a função de inicialização e, em seguida,

02:10.330 --> 02:12.880
a próxima será implementar a função de avanço.

02:12.880 --> 02:13.810
Então vamos fazer isso.

02:13.810 --> 02:17.060
Primeiro, precisamos apresentar nossa classe.

02:17.200 --> 02:22.930
Então começamos com a aula e nós damos um nome à nossa classe, onde é onde podemos chamá-la de rede.

02:23.650 --> 02:29.980
E então, nesta classe de rede, vou usar uma técnica de programação de objetos que é chamada de

02:30.310 --> 02:35.120
herança e que é apenas herdar de todas as ferramentas de uma classe pai.

02:35.200 --> 02:41.550
Portanto, nossa classe de rede que estamos prestes a fazer é um teste infantil de uma classe maior que é.

02:41.770 --> 02:44.110
E esse módulo.

02:44.470 --> 02:50.790
Então, é apenas para herdar de todas as ferramentas desta classe de módulo, que, claro, as ferramentas para implementar

02:50.790 --> 02:51.940
uma rede neural.

02:51.940 --> 02:57.880
Então, esse é um truque muito poderoso e evolutivo na programação orientada a objetos que está indo na herança.

02:57.910 --> 03:02.670
E agora nós estamos herdando deste módulo classe pai.

03:02.800 --> 03:06.000
Tudo bem e agora estamos prontos para entrar na classe.

03:06.130 --> 03:12.910
Então, estou pressionando Enter duas vezes na verdade, porque estaremos fazendo duas funções e estamos começando com

03:13.140 --> 03:14.280
a função final.

03:14.350 --> 03:20.470
Então, a função init, devemos nomeá-lo dessa maneira com dois neste curso, então nela.

03:20.650 --> 03:25.750
E, novamente, ressalta que é apenas a sintaxe de Python que é exatamente como devemos fazê-lo.

03:25.930 --> 03:28.460
E então precisamos colocar os argumentos.

03:28.720 --> 03:30.340
Então, temos três argumentos.

03:30.340 --> 03:35.800
O primeiro é um argumento obrigatório que é realmente eu e eu.

03:35.800 --> 03:42.250
Não há nenhum mistério sobre isso que se refere ao objeto que será criado a partir desta classe que estamos prestes

03:42.250 --> 03:42.810
a fazer.

03:42.820 --> 03:44.400
Você sabe que estamos fazendo essa aula.

03:44.470 --> 03:48.980
É como algumas instruções algum modelo dessa rede neural que queremos construir.

03:49.180 --> 03:53.620
E então, uma vez que a aula está pronta, podemos fazer a maioria das redes com as quais desejamos.

03:53.620 --> 04:00.130
E cada uma dessas novas redes será algum objeto desta classe e, uma vez que estaremos usando

04:00.400 --> 04:07.630
o objeto para outros fins, precisamos, mas quais são as variáveis ​​do objeto e para Spudis estamos usando este

04:07.630 --> 04:11.900
eu aqui para especificar que nós está se referindo ao objeto.

04:12.100 --> 04:18.430
Então, sempre que eu quiser usar disponível no meu objeto, usarei o self antes da variável para

04:18.430 --> 04:21.340
especificar que esta é uma variável do objeto.

04:21.340 --> 04:25.680
são, naturalmente, o número de neurônios de entrada e o número de neurônios de saída.

04:25.680 --> 04:30.240
Tudo bem, então esse é o primeiro argumento e depois temos dois outros argumentos que

04:30.550 --> 04:38.220
Então, o número de neurônios de entrada que vamos chamar de tamanho de entrada e na verdade é

04:38.310 --> 04:45.890
cinco porque nossos vetores de entrada têm cinco dimensões para três sinais mais orientação mais orientação negativa

04:45.900 --> 04:51.020
que são vetores de valores codificados que descrevem um estado do ambiente.

04:51.210 --> 04:54.960
Estes cinco valores são suficientes para descrever o estado do meio ambiente.

04:54.960 --> 05:00.600
Poderíamos ter pensado em Menos valores ou mais valores, mas isso é o que eu tentei e realmente faz

05:00.600 --> 05:05.520
sentido porque realmente precisamos de um sinal da esquerda na nossa frente e um à direita.

05:05.520 --> 05:10.860
orientação de orientação e menos para você Saiba como acompanhar o objetivo que você estava tentando alcançar.

05:10.860 --> 05:17.370
Você sabe quando estamos dirigindo um carro, poderíamos ter ido para um sinal de 360 ​​que você conhece como os sinais no

05:17.400 --> 05:22.200
topo dos carros do Google, que podemos auto-conduzir totalmente com três sensores e, então, temos essa

05:22.530 --> 05:29.160
E então temos, claro, os neurônios de saída da nossa rede que correspondem às ações e temos

05:29.160 --> 05:32.840
três ações possíveis indo indo direto ou indo direto.

05:32.880 --> 05:38.520
E, portanto, vou chamar isso e a ação e haverá três deles.

05:38.520 --> 05:39.030
Tudo bem.

05:39.120 --> 05:44.850
Até agora, só temos que dar nomes às insumos e depois usaremos estes vôlei para fazer as condições

05:44.940 --> 05:46.140
dentro da rede neural.

05:47.090 --> 05:55.010
Tudo bem então e você começa usando outro por torção, esse truque é uma superfunção que

05:55.010 --> 05:59.310
é uma função que realmente herda do módulo.

05:59.390 --> 06:02.730
Então, por isso, tivemos que usar a herança para herdar o módulo também.

06:02.750 --> 06:04.440
Este é o primeiro a usar.

06:04.520 --> 06:11.120
E, basicamente, estamos usando apenas esta superfunção super super para poder usar as ferramentas do módulo que

06:11.580 --> 06:13.320
são muito mais eficientes.

06:13.670 --> 06:18.620
E dentro da superfunção eu só preciso especificar primeiro a rede.

06:18.650 --> 06:25.100
de chul de rede que você conhece, porque isso é herdar da classe pai do módulo e, em seguida, o nosso objeto.

06:25.550 --> 06:27.360
Então, essa é a nossa classe

06:27.380 --> 06:35.220
E então eu apenas estou adicionando isso e está em uma função como essa, exatamente como o chamamos.

06:35.570 --> 06:39.350
Tudo bem, então é apenas um truque que é apenas usar todas as ferramentas que tenho.

06:39.360 --> 06:46.270
E nesse módulo, podemos passar para o próximo passo, que é especificar a camada de entrada.

06:46.550 --> 06:53.300
Então, basicamente, o que devo fazer é introduzir uma nova variável que será anexada ao objeto e

06:53.300 --> 06:57.120
esta variável conterá o número de neurônios de entrada.

06:57.170 --> 07:05.140
Portanto, não deve ser confundido com tamanho de entrada tamanho de entrada é o argumento da função final.

07:05.180 --> 07:09.710
não é a variável que está anexada ao objeto, mas a variável que está anexada ao objeto.

07:09.710 --> 07:10.360
Mas essa

07:10.520 --> 07:16.520
Bem, como acabei de mencionar, precisamos especificar que é em vez disso anexado ao objeto, então usamos

07:17.230 --> 07:22.130
uma autodidata e agora damos um nome a esta primeira variável anexada ao objeto.

07:22.190 --> 07:24.870
E assim podemos simplesmente dar o mesmo nome que a entrada.

07:24.920 --> 07:33.650
Podemos chamá-lo de tamanho de entrada e diremos que é igual aos argumentos uma função que é tamanho de entrada.

07:33.680 --> 07:34.080
Tudo bem.

07:34.130 --> 07:39.900
Cada vez que estou criando um objeto da classe de rede e estou especificando o tamanho da entrada, como por

07:39.900 --> 07:41.170
exemplo, estou colocando 5.

07:41.180 --> 07:47.330
Haverá 5 aqui e, portanto, a variável de tamanho de entrada do nosso objeto terá o valor de

07:47.690 --> 07:54.110
5, pois esse tamanho de entrada será 5 e, portanto, nossa nova rede terá 5 neurônios de entrada

07:54.110 --> 07:55.470
na camada de entrada.

07:55.490 --> 07:55.790
Tudo bem.

07:55.790 --> 08:02.180
E então é o mesmo para a outra variável que queremos anexar aos objetos.

08:02.210 --> 08:08.100
E, como você pode ter adivinado, esta será uma variável para o número de neurônios de saída.

08:08.330 --> 08:15.030
E para dizer que tomamos nosso objeto e depois damos um nome a esta segunda variável do

08:15.040 --> 08:17.740
objeto que vamos chamar e a ação.

08:18.170 --> 08:23.600
E isso será igual a este argumento aqui, dado o número de ações que é o número de neurônios

08:23.600 --> 08:24.250
de saída.

08:24.530 --> 08:30.850
E então, estabelecemos igual a ação efetivamente e a ação será igual a três.

08:30.890 --> 08:37.930
Portanto, a variável e a ação anexada ao nosso objeto a uma rede obterão o valor de três.

08:38.240 --> 08:41.680
Na verdade, podemos ver avisando aqui que ele diz um nome indefinido.

08:41.720 --> 08:44.180
E então, bem, é porque aqui usamos o.

08:44.230 --> 08:46.030
E, em seguida, atalho.

08:46.350 --> 08:48.530
E precisamos usar um atalho aqui.

08:48.590 --> 08:52.780
E para o nosso início torche e em Mudgal e então ele irá desaparecer.

08:52.880 --> 08:53.670
Aqui vamos nós.

08:53.690 --> 08:54.580
Perfeito.

08:54.590 --> 09:00.800
Agora, temos novas advertências, todas as advertências aqui são apenas para especificar que o que importamos ainda não

09:00.800 --> 09:01.520
é usado.

09:01.580 --> 09:04.660
Isso está certo, vamos usá-los depois.

09:04.670 --> 09:10.010
Tudo bem, então, temos outras duas variáveis ​​que queremos definir para o objeto.

09:10.190 --> 09:15.820
as conexões completas das conexões completas entre as diferentes camadas da nossa rede neural.

09:15.830 --> 09:16.810
E estas serão

09:16.820 --> 09:21.800
Então, agora mesmo queremos criar uma rede neural composta de apenas uma cabeça em seu

09:21.800 --> 09:23.440
mundo, haverá duas conexões completas.

09:23.570 --> 09:27.740
Haverá uma primeira conexão completa entre a camada de entrada e a camada oculta.

09:27.980 --> 09:32.450
E um segundo conexão completa entre a colina e a camada de saída.

09:32.480 --> 09:34.770
Então vamos começar com a primeira conexão completa.

09:34.890 --> 09:43.310
Vamos chamá-lo de SE1 E, novamente, uso-me aqui para especificar que o FC é uma variável do meu objeto para

09:43.780 --> 09:44.530
resolver isso.

09:44.530 --> 09:47.490
FC um que será igual a.

09:47.630 --> 09:55.160
E agora usamos o módulo N in e vamos usar uma função chamada R linear e é exatamente

09:55.160 --> 10:02.080
essa conexão completa entre os neurônios e a camada de entrada para os neurônios do escondido.

10:02.180 --> 10:04.090
E o que quero dizer com uma conexão completa.

10:04.160 --> 10:09.190
Isso significa que todos os neurônios da camada de entrada estarão todos conectados a todos os neurônios

10:09.190 --> 10:09.920
do Here aqui.

10:10.190 --> 10:16.140
E assim, para fazer essa conexão, usamos essa função linear à qual precisamos colocar alguns argumentos.

10:16.190 --> 10:19.880
E como você pode ver esses argumentos estão em recursos.

10:19.880 --> 10:25.370
Então, esse é o número de neurônios da primeira lei que você deseja conectar-se a recursos que é o

10:25.370 --> 10:30.110
número de neurônios da segunda camada que deseja conectar, que é a camada à direita que é

10:30.110 --> 10:32.360
a camada oculta e a bicicleta é verdadeira.

10:32.420 --> 10:38.850
Então, a bicicleta é verdade, manteremos o valor padrão que é para ter um viés e não apenas um pouco

10:38.900 --> 10:43.350
de peso ligado à execução, teremos que esperar e um viés para cada camada.

10:43.610 --> 10:46.140
E tão bem, vamos ver o que precisamos para entrar.

10:46.280 --> 10:51.850
Portanto, o primeiro argumento em características é o número de neurônios de entrada na camada de entrada.

10:52.000 --> 10:52.930
E então, onde está.

10:53.030 --> 10:55.080
Bem, isso é realmente impreciso.

10:55.100 --> 11:01.930
Esse é o argumento da nossa função de init que mais tarde poderemos combater a orientação dos três sinais

11:02.200 --> 11:04.150
e a orientação de Mannus.

11:04.160 --> 11:05.020
Aqui vamos nos.

11:05.190 --> 11:14.300
Quando os primeiros argumentos e colocar o tamanho e, em seguida, o segundo argumento são recursos que é o número de

11:14.300 --> 11:17.090
neurônios que queremos ter na segunda camada.

11:17.180 --> 11:20.450
A segunda camada que estará totalmente conectada à primeira camada.

11:20.450 --> 11:24.960
E agora a questão é quantos neurônios queremos nesta camada oculta.

11:25.220 --> 11:27.420
Bem, fiz muito treinamento de parâmetros.

11:27.440 --> 11:29.110
Eu fiz muitas experiências.

11:29.210 --> 11:31.940
Isso é o que fazemos ou é o que fazemos em profundidade.

11:31.940 --> 11:38.270
Em geral, fazemos muita experiência para ver qual seria a melhor rede neural para o nosso

11:38.270 --> 11:39.170
problema específico.

11:39.170 --> 11:45.950
E então eu tento muitos valores e acabei escolhendo 30 30 execuções em uma camada oculta e você verá que com

11:45.950 --> 11:50.750
este número obtemos alguns resultados muito bons, mas então sinta-se livre para mudar a arquitetura

11:50.750 --> 11:51.580
da rede neural.

11:51.580 --> 11:53.120
Sinta-se livre para jogar com ele.

11:53.180 --> 11:58.730
Você não pode apenas mudar o número de neurônios aqui e ali, mas também pode adicionar mais camadas

11:59.150 --> 12:05.000
para que você consiga um carro ainda melhor, mas 30 neurônios hinna nos obterão uma boa rede neural e

12:05.000 --> 12:06.000
uma boa causa.

12:06.020 --> 12:07.390
Então, é por isso que buscamos.

12:07.520 --> 12:08.410
E nós vamos lá.

12:08.420 --> 12:13.500
Temos nossa primeira conexão completa realmente com essa função linear.

12:13.520 --> 12:16.910
Fazemos a conexão entre a camada de entrada e a perna escondida.

12:17.360 --> 12:23.270
E agora é hora de fazer a segunda conexão completa, que é a conexão completa entre a camada oculta

12:23.600 --> 12:25.180
e a camada de saída.

12:25.490 --> 12:26.750
Então vamos lá.

12:26.750 --> 12:31.380
Vamos ligar para esta segunda conexão completa no C2.

12:31.490 --> 12:32.280
Aqui vamos nós.

12:32.360 --> 12:36.400
E ainda está disponível para mais objetos usando o Saphir.

12:36.650 --> 12:38.330
E, novamente, nós usamos.

12:38.450 --> 12:45.310
Bem, na verdade, podemos copiar isso porque vamos usar o módulo N no módulo e, em seguida, a função linear.

12:45.530 --> 12:49.250
Mas então precisamos mudar os argumentos, é claro, primeiro.

12:49.280 --> 12:55.050
Esse é o mesmo primeiro é o número de neurônios que vamos ter na primeira camada da conexão.

12:55.190 --> 12:56.510
Então, isso é oculto lá.

12:56.720 --> 13:03.810
E, portanto, isso é 30 e, em seguida, segundo argumento é o número de neurônios na segunda camada da

13:04.010 --> 13:08.810
conexão e que corresponde à camada de saída e a saída que tem.

13:08.980 --> 13:15.020
E os neurônios reais que mais tarde serão três porque temos três ações possíveis, mas até agora temos

13:15.020 --> 13:16.930
que usar os nomes que definimos.

13:17.050 --> 13:23.990
o nome do argumento da função init e, portanto, nós inserimos aqui e a ação e aí vamos.

13:23.990 --> 13:24.950
Esse é

13:24.950 --> 13:27.760
Em primeiro lugar, nossas conexões de tupla re.

13:27.920 --> 13:30.980
E em segundo lugar, todas as funções são Israel.

13:31.400 --> 13:36.940
Então, é isso que vamos inicializar o nosso objeto sempre que criamos um objeto da classe de rede.

13:37.130 --> 13:44.300
E então, assim que criamos um objeto bem, todas essas variáveis ​​para variáveis ​​aqui tamanho de entrada e reação.

13:44.380 --> 13:46.980
Você e dois serão definidos.

13:47.180 --> 13:52.060
E é assim que obteremos a arquitetura da nossa rede animal para cada objeto que criamos.

13:52.160 --> 13:59.450
corresponderá a uma rede neural de cinco neurônios de entrada 30 neurônios escondidos e três neurônios de saída.

13:59.450 --> 14:00.440
Cada objeto

14:00.470 --> 14:01.430
Então vamos lá.

14:01.430 --> 14:06.980
Terminamos com esta primeira função e agora podemos avançar para a segunda função que é a

14:06.980 --> 14:13.100
função direta e que será usada para ativar os neurônios na rede neural usando a função de ativação

14:13.100 --> 14:19.500
do retificador e principalmente para retornar aos valores do cubo que são as saídas de uma única rede.

14:19.580 --> 14:23.420
Então eu não posso esperar para fazer isso no próximo tutorial e até então eu.
