WEBVTT

00:00.240 --> 00:02.790
Ciao e benvenuto in questo tutorial Python.

00:02.790 --> 00:07.230
Bene, abbiamo un'ultima funzione da implementare nella nostra classe di memoria di replay.

00:07.230 --> 00:12.060
Questa è la funzione semplice e questo è ovviamente quello di ottenere alcuni campioni casuali dalla nostra memoria.

00:12.210 --> 00:16.080
E quindi questa funzione restituirà questi campioni casuali.

00:16.080 --> 00:17.850
Va bene, entriamoci dentro

00:17.870 --> 00:20.630
Lo chiameremo semplice.

00:20.640 --> 00:21.330
Eccoci qui.

00:21.420 --> 00:25.030
E questa funzione prende due argomenti come input.

00:25.260 --> 00:32.490
Il primo come al solito il nostro oggetto futuro per riprodurre la classe di memoria e il secondo argomento è possibile

00:32.490 --> 00:33.430
provare a indovinare.

00:33.510 --> 00:40.290
Bene, stiamo prendendo alcuni campioni di dimensioni fisse e quindi dobbiamo scegliere una dimensione per i campioni e più

00:40.290 --> 00:42.610
precisamente la chiamiamo dimensione del lotto.

00:42.820 --> 00:47.910
Questo è il nome che daremo alla nostra dimensione del secondo argomento.

00:48.180 --> 00:49.530
E noi andiamo.

00:49.560 --> 00:54.490
Abbiamo i nostri due argomenti e ora possiamo implementare la funzione semplice.

00:54.500 --> 01:00.780
Quindi ora voglio solo avvertirti che questo diventerà un po 'tecnico, ma farò del mio meglio per spiegarlo.

01:01.250 --> 01:05.140
Quindi inizieremo creando la variabile samples.

01:05.150 --> 01:09.620
Questa è solo la variabile che conterrà i campioni della memoria.

01:09.620 --> 01:11.340
Va bene così semplice è uguale.

01:11.360 --> 01:14.090
E ora come facciamo a ottenere questi campioni.

01:14.450 --> 01:20.960
Beh, prima di tutto dobbiamo prendere la nostra memoria perché stiamo ottenendo i campioni dalla nostra memoria.

01:20.960 --> 01:26.870
Quindi probabilmente avremo bisogno della dimensione del batch, perché i campioni verranno ridimensionati in dimensioni

01:26.930 --> 01:27.720
di Elon.

01:27.830 --> 01:33.920
bisogno della dimensione del batch e quindi abbiamo bisogno di alcuni trucchi torche o bisonti per ottenere un buon formato di questi campioni.

01:34.040 --> 01:35.600
Quindi abbiamo bisogno di memoria, abbiamo

01:35.600 --> 01:40.790
Quindi cosa farò scriverò la riga di codice e poi spiegherò quell'elemento

01:40.790 --> 01:41.900
per elemento.

01:41.990 --> 01:42.860
Facciamolo.

01:42.860 --> 01:48.580
Sto iniziando prendendo una funzione di zip che spiegherò molto presto cosa fa.

01:48.620 --> 01:51.980
E all'interno di questa funzione aggiungerò una stella.

01:52.100 --> 01:53.800
Ho intenzione di espandere anche quello.

01:53.900 --> 02:02.600
e il pensiero casuale centrale così casuale come si potrebbe intuire è la libreria casuale che abbiamo importato qui.

02:02.600 --> 02:03.360
La stella

02:03.410 --> 02:08.900
Questa è la ragione principale per cui abbiamo dovuto importare queste librerie casuali perché stiamo prendendo alcuni

02:08.900 --> 02:09.730
campioni casuali.

02:10.040 --> 02:15.570
Quindi da questa libreria casuale useremo la funzione semplice.

02:15.600 --> 02:20.060
Quindi queste sono le nostre variabili e questa è una funzione, quindi aggiungerò alcune parentesi.

02:20.210 --> 02:26.110
E ora come puoi vedere sample è una funzione e dobbiamo mettere alcuni argomenti in modo che tu possa

02:26.110 --> 02:27.850
vedere il primo argomento stesso.

02:27.850 --> 02:34.660
questo corrisponde alla memoria di sé-parlare la memoria del nostro oggetto istanza futuro della nostra memoria di riproduzione per noi.

02:34.870 --> 02:36.970
E in realtà parlando di sé

02:37.180 --> 02:44.290
Quindi aggiungerò qui quella memoria e poi la seconda argomentazione è come potreste aver indovinato la dimensione del Bechuana presa

02:44.530 --> 02:51.360
in modo casuale dalla nostra memoria e che gli abbiamo dato un nome che è la dimensione del batch.

02:51.550 --> 02:55.690
Quindi il secondo argomento sarà Bachche sucks.

02:55.870 --> 02:56.410
Tutto ok.

02:56.470 --> 03:01.080
Quindi la riga di codice è stata scritta e ho intenzione di spiegare cosa fa.

03:01.510 --> 03:08.260
Quindi, prima di tutto con questa semplice funzione di punto casuale, stiamo prendendo alcuni campioni casuali dalla memoria

03:08.800 --> 03:11.820
che aveva una dimensione fissa di quella dimensione.

03:12.550 --> 03:13.940
Quindi è comprensibile.

03:14.150 --> 03:18.230
Ma allora cosa fa questa funzione stella Zipp.

03:18.530 --> 03:20.500
Beh, non c'è alcun mistero al riguardo.

03:20.540 --> 03:22.870
È proprio come la funzione di risagoma.

03:22.880 --> 03:28.460
Quindi, per esempio, aggiungerò un po 'qui solo per spiegare che lo toglierò.

03:28.460 --> 03:34.680
Quindi diciamo che ad esempio abbiamo un elenco dei seguenti elementi, ad esempio.

03:34.820 --> 03:37.900
Primo uno due tre.

03:38.180 --> 03:39.680
E poi il secondo elemento.

03:39.680 --> 03:43.180
Quattro cinque sei.

03:43.190 --> 03:48.020
Quindi abbiamo una lista di due doppi di tre elementi uno due tre quattro cinque sei.

03:48.380 --> 03:52.690
Bene, allora se applico la funzione zip con la stella sopra.

03:52.880 --> 04:02.840
Beh, cosa sarebbe diventato così Zip Star List sarà uguale a una nuova lista, ma di una

04:03.380 --> 04:12.440
forma diversa e una forma diversa sarà uno per poi due tre e poi cinque sei.

04:12.460 --> 04:12.770
Tutto ok.

04:12.800 --> 04:13.950
Quindi è proprio quello che fa.

04:13.970 --> 04:16.640
Rimodella la tua lista.

04:16.990 --> 04:21.610
OK così ora che capisci cosa fa questa lista stellare di Zipp.

04:21.680 --> 04:24.560
Bene, ora spieghiamo perché abbiamo dovuto farlo.

04:24.590 --> 04:30.360
Quindi, come hai capito, aggiungeremo gli eventi alla memoria e gli eventi avranno la forma.

04:30.440 --> 04:34.530
Prima lo stato poi l'azione e poi la ricompensa.

04:34.820 --> 04:40.330
Ma per il nostro algoritmo non vogliamo questo formato, in realtà vogliamo che i nostri campioni abbiano il seguente formato.

04:40.330 --> 04:47.540
Un formato è composto da tre campioni un campione per gli stati un campione per le azioni e un campione

04:47.540 --> 04:48.660
per il premio.

04:48.800 --> 04:53.690
Quindi per esempio diciamo che questo uno a tre è stato uno azione uno.

04:53.800 --> 05:01.100
Vogliamo uno e poi dichiariamo all'azione due e dovremmo benissimo quello che vogliamo sia un lotto per ogni lotto per

05:01.100 --> 05:03.630
lo stato uno e lo stato due.

05:03.680 --> 05:10.090
Uno è un match per l'azione uno in azione due e un terzo che per noi eravamo uno e noi eravamo due.

05:10.190 --> 05:15.680
Questo è solo il formato che ci si aspetta dopo, quindi avvolgeremo questi lotti in

05:15.770 --> 05:22.610
una torta verso un impatto orribile che lontano ricorderemo è una variabile che contiene sia un tensore sia

05:22.610 --> 05:23.280
un gradiente.

05:23.510 --> 05:29.750
E questo per essere in grado di differenziare rispetto a un tensore per essere in grado di

05:29.750 --> 05:35.480
differenziare rispetto all'intensità all'interno della struttura di un orribile contenente un tensore e un gradiente.

05:35.540 --> 05:37.820
Di nuovo è così che funziona la torcia Pi.

05:37.820 --> 05:44.480
Quindi, per riassumere, creiamo una partita per ciascuna azione e ricompensa dello stato e poi metteremo ciascuna di

05:44.480 --> 05:50.600
queste vecce separatamente in alcuni byte che Horrible è quella che otterrà una sfumatura in modo che

05:50.840 --> 05:54.360
alla fine saremo in grado di differenziare ognuno di loro.

05:54.620 --> 05:57.430
Va bene, questo è lo scopo della funzione Zipp.

05:57.480 --> 06:00.350
Quindi permettimi di rimuovere questo commento.

06:00.530 --> 06:05.980
E ora l'unica cosa che dobbiamo fare è restituire i campioni.

06:06.230 --> 06:12.650
restituire i campioni direttamente per il semplice motivo che vogliamo mettere i campioni in una soluzione redditizia.

06:12.830 --> 06:15.670
Quindi, come ho appena spiegato, non possiamo

06:15.680 --> 06:22.580
Quindi, per fare questo per ognuno degli esempi, useremo la funzione mappa e questa funzione

06:22.580 --> 06:30.180
mappa eseguirà la mappatura dai campioni alle variabili di tortura che conterranno un tensore e un gradiente.

06:30.200 --> 06:33.550
Quindi come puoi vedere questa funzione mappa richiede diversi argomenti.

06:33.620 --> 06:38.600
Il primo argomento è una funzione e questa funzione sarà la funzione che convertirà

06:38.600 --> 06:40.590
i campioni in alcune variabili torche.

06:40.760 --> 06:45.340
E il secondo argomento è ciò su cui vogliamo applicare questa funzione.

06:45.590 --> 06:50.580
Quindi saranno gli argomenti di questa funzione e quindi cosa sarà.

06:50.600 --> 06:52.780
Ovviamente saranno i campioni.

06:52.790 --> 06:55.510
Quindi il secondo argomento qui sarà i simboli.

06:55.870 --> 06:59.440
Ma poi definiamo la funzione su cui vogliamo applicare.

06:59.480 --> 07:00.620
Ciascuno dei simboli

07:01.040 --> 07:06.890
Quindi per definire una funzione qui dobbiamo prima dare un nome alla funzione che chiameremo lambda.

07:07.070 --> 07:14.330
Questo è solo un nome e dare a Lenda poi X che sarà la variabile di questa funzione.

07:14.420 --> 07:18.390
Quindi questo è solo un nome e dare per la variabile e poi.

07:18.500 --> 07:24.140
dovrebbe essere qualcosa che convertirà i nostri campioni in una variabile torcia e per farlo.

07:25.400 --> 07:32.010
E qui diamo l'espressione della funzione che è ciò che vogliamo che questa funzione lambda ritorni e

07:32.250 --> 07:34.800
veda che cosa sta per essere bene

07:34.800 --> 07:37.370
L'abbiamo già menzionato in alcuni tutorial precedenti.

07:37.560 --> 07:39.880
Bene, abbiamo la funzione Voivode per loro.

07:40.110 --> 07:46.680
La Voce funzionerà, faremo quella conversione da un ballerino di torcia a una variabile che conterrà il

07:46.690 --> 07:48.590
sensore e il più grande.

07:48.810 --> 07:55.830
Quindi la prima cosa che aggiungerò qui è la variabile variabile all'interno della quale ho intenzione

07:56.010 --> 08:01.540
di convertire X perché X saranno le semplici che verranno applicate ai campioni.

08:02.420 --> 08:09.080
Ma ecco che c'è un'ultima cosa tecnica che dobbiamo implementare è il fatto che per ogni

08:09.140 --> 08:15.680
lotto che è contenuto nel campione, ad esempio il lotto di azioni a 1 8 2

08:15.680 --> 08:23.080
3 e le altre azioni, dobbiamo concatenarlo con rispetto al primo motore del tempo che corrisponde agli Stati.

08:23.120 --> 08:25.380
E perché dobbiamo fare questa concatenazione.

08:25.550 --> 08:27.610
È solo perché tutto sia ben allineato.

08:27.710 --> 08:34.740
Quello è quello in ogni riga per dichiarare l'azione e la ricompensa corrisponde allo stesso tempo t. In modo che alla fine avremo una lista di lotti tutti ben allineati e ogni lotto è una torta verso Voivod.

08:35.180 --> 08:42.240
Quindi, come possiamo rendere questa concatenazione.

08:42.470 --> 08:44.700
Bene, dobbiamo usare la funzione cat dalla libreria torcia.

08:44.840 --> 08:48.030
Quindi aggiungeremo qui la torcia a cui aggiungiamo che

08:48.170 --> 08:55.400
viene applicata a X, ma in questa funzione dobbiamo specificare la dimensione rispetto alla quale vogliamo fare quella concatenazione.

08:55.400 --> 09:00.820
E come ho appena detto questo è il motore del primo tempo che ha l'era dell'indice.

09:00.860 --> 09:05.460
E qui andiamo abbiamo la nostra funzione pronta questa Lunda che la funzione

09:05.900 --> 09:12.320
prenderà i campioni concatenandoli rispetto al primo motore del tempo e poi eventualmente convertiremo i sensori in alcune

09:12.320 --> 09:18.110
variabili torche che contengono sia un tensore sia un gradiente in modo che più tardi quando

09:18.110 --> 09:24.230
si applica a castigate nel senso che saremo in grado di differenziare per avere pesi di dati.

09:24.230 --> 09:28.610
Va bene, questa funzione è pronta.

09:28.610 --> 09:30.170
E poi ecco il secondo argomento della funzione mappa.

09:30.410 --> 09:35.270
Dobbiamo specificare su cosa vogliamo applicare questa funzione e questo è su tutti i nostri campioni.

09:35.270 --> 09:42.960
Eccoci.

09:43.040 --> 09:43.850
Applicheremo questa funzione

09:43.850 --> 09:50.750
lambda su tutti i campioni in modo che alla fine si ottenga un elenco di partite in cui ogni match è una torcia PI praticabile.

09:50.990 --> 09:53.840
Va bene, era abbastanza tecnico ma ora almeno tutto funzionerà bene.

09:53.840 --> 09:58.810
Vogliamo usare questa tecnica.

09:58.850 --> 10:00.060
la torcia come vuoi

10:00.080 --> 10:05.150
In seguito lo usiamo solo qui, quindi se non vuoi avere una profonda comprensione dei dettagli tecnici qui

10:05.150 --> 10:11.060
va bene, puoi solo copiare queste tre righe di codice per semplificare la tua memoria se vuoi creare un'intelligenza artificiale con

10:11.060 --> 10:14.460
Ma ora la buona notizia è che abbiamo finito con questa replaying

10:14.600 --> 10:21.110
che la ripetizione dell'esperienza di classe è ora implementata e che possiamo passare alla prossima e ultima classe che sarà l'intera modalità di sicurezza.

10:21.470 --> 10:26.780
Quindi in questo modello avremo ovviamente la nostra rete

10:26.960 --> 10:34.520
che sperimenterà la riproduzione e quindi tutto il resto dell'algoritmo di sicurezza.

10:34.640 --> 10:36.600
Quindi sarà una classe molto più grande.

10:36.620 --> 10:39.150
che tu possa capire meglio cosa sta succedendo.

10:39.200 --> 10:44.240
Faremo circa 10 funzioni, ma è solo perché stiamo facendo questo passo dopo passo in modo

10:44.240 --> 10:46.130
Quindi non vedo l'ora di implementare il nostro modello di sicurezza.

10:46.520 --> 10:49.260
E fino ad allora I.

10:49.280 --> 10:50.900
&nbsp;
