Hallo en welkom bij deze tutorial.
Nu gaan we deze tweede functie maken om de gewichten te initialiseren, en deze zal
worden gebruikt om deze gewichten optimaal te leren.
Dus de tweede functie, we gaan het gewichten noemen.
Onderstreep het, en het zal als argument het object nemen en dat het nieuwe netwerk zal vertegenwoordigen.
Dus dat is alles.
En dan Colin en laten we nu in de functie gaan om te definiëren wat we wilden doen.
Dus eigenlijk willen we dat het de gewichten van het nieuwe netwerk op zo'n manier initialiseert dat
we optimaal leren.
Dit zal dus niet bijzonder intuïtief lijken.
Dit is gebaseerd op onderzoekspapers en experimenten.
We gaan de gewichten initialiseren op een specifieke manier die we nog niet eerder hebben gezien.
Maar geloof me, dat zal het leerproces optimaliseren.
We zullen het dus gewoon implementeren zonder in te gaan op de details waarom we de gewichten op deze manier
initialiseren.
En dus gaan we beginnen met het gebruik van een truc die later zal worden gebruikt om het
onderscheid te maken tussen de convolutie en de volledige verbinding, want, weet je, onthoud of ik zal ogen hebben en daarom zal
het enkele convolutionele lagen hebben.
En natuurlijk zal het ook enkele volledig verbonden lagen hebben.
En we zullen een andere initialisatie van het gewicht hebben voor deze twee soorten verbindingen.
Dus we gaan deze truc gebruiken om deze twee soorten verbindingen te scheiden en dan zullen
we enkele if-voorwaarden gebruiken om een andere initialisatie voor elk van deze verbindingen te krijgen.
Deze truc is dus om een nieuwe variabele te maken die we een klassenaam gaan noemen en die
gelijk zal zijn aan een object.
Dus M vertegenwoordigt het neurale netwerk, maar het is een object.
Dat zullen we later zien.
En we gaan een speciaal attribuut krijgen van dit object, dat zal de klassenaam zijn met dubbel op deze
kern, eerste klasse, dubbel op deze kern, dat dubbel in de kern opnieuw naam en bijna daar, nog een dubbel in
de score .
Dus dat is een behoorlijk lelijke truc om te zoeken naar het type verbinding van ons neurale netwerkobject.
Maar dat geeft ons precies wat we willen.
Je zult zien dat het zinvol is als we beginnen als de omstandigheden.
Trouwens, over voorwaarden gesproken, we kunnen ze nu meteen opslaan.
Dus wat we nu gaan doen, is een eerste if-voorwaarde starten, waarmee we de eerste casus krijgen, dat wil
zeggen als de verbinding een convolutie is.
Om deze voorwaarde recht te zetten, schrijven we if class name.
Dat is prima, hier gebruiken we een methode, de fine-methode find, en binnenin zetten we aanhalingstekens voor convolutie en dus
als de klassenaam die boete komt, gaan we het anders doen dan min één.
Dat is eigenlijk als we een convolutie hebben, want min één betekent nee.
Welnu, in dat geval zullen we een speciale initialisatie van de gewichten doen.
Dus deze voorwaarde betekent hier dat we een convolutieverbinding hebben.
Dus in dat geval voeren we deze specifieke initialisatie uit van de gewichten die we willen doen.
En dat is waar alle niet-intuïtieve dingen zullen komen.
We beginnen met het maken van een variabele die we gewichten en deze vorm gaan noemen.
Dus wacht op deze vorm zal een lijst zijn die in feite de vorm van het gewicht in ons
neurale netwerk zal bevatten en dus gaan we de lijstfunctie gebruiken om een lijst binnenin te maken.
We gaan dat gewicht invoeren in het neurale netwerk, wat de gewichten van het neurale netwerk zullen
zijn, maar dan in de convolutieverbinding.
En om de vorm van deze gewichten te krijgen, gebruiken we een ander attribuut, namelijk dat gegevens en vervolgens groottegrootte ons de
vorm van deze gewichten in de convolutieverbinding zal geven.
Dus nu bevat Weight Shape in een lijst de vorm van de gewichten in de convolutieverbindingen van ons neurale
netwerk en.
Oké, dus we hebben een vorm, om de gewichten van deze convolutieverbinding te initialiseren, we
moeten eerst de waarden hebben, het product van de eerste dimensie door de tweede dimensie, door de
derde dimensie.
Dus dat is wat we nu gaan krijgen.
En dan zullen we ook de Xeros-dimensie tijden moeten krijgen, de tweede dimensie maal de derde dimensie.
En dan zullen we deze twee waarden gebruiken bij de berekening van hoe we de gewichten initialiseren.
Dus laten we deze naar dit eerste product brengen waar we het in noemen, en dat zal gelijk zijn aan het product.
En we gaan de prod-functie gebruiken, een functie van non-pay, die een sneltoets enpi heeft.
Dus enpi die froud.
En binnenin voeren we in waar we het product van willen maken.
En dus, zoals we al zeiden, dat is de dimensie één, twee en drie van onze gewichtsvorm.
Om dit te krijgen, kunnen we een gewichtsvorm nemen en de indexen van deze drie dimensies krijgen.
En dus zeiden we dat het dimensie één tot en met dimensie drie was.
Dus twee, dimensie vier uitgesloten.
En zo kunnen we het krijgen want de bovengrens is hier niet meegerekend.
Dus dat is precies wat we dan willen.
Idem voor fan-out.
Zoals we al zeiden, zal uitwaaieren het product zijn van de dimensie nul maal dimensie tot dimensie drie.
En dus kunnen we hier de index krijgen van twee inbegrepen naar vier uitgesloten.
Dus dat levert ons het product van dimensie twee en drie op.
En dan kunnen we het vermenigvuldigen met de dimensie nul, waartoe we toegang hebben met witte vorm nul van index nul.
Dus om samen te vatten, dit is de ene keer in de twee keer in de drie en.
Net onder, hebben we.
Dem nul.
Tijden tot tijden in van onze wachtlijst van wachten.
Oké, dus nu gaan we deze twee waarden gebruiken, Fenning, en ontdekken om door te gaan
met de initialisatie, omdat we een nieuwe waarde gaan berekenen die we W-gebonden gaan noemen.
En dat zal gelijk zijn aan de vierkantswortel, die we kunnen krijgen met de functie en P van
dan door die beveiligingssectie ervoor.
Dus de vierkantswortel van zes gedeeld door uitwaaieren dus waaier en plus ontdek dat we gaan.
Dus deze w hier vertegenwoordigt op de een of andere manier de grootte van de tienden van gewichten.
En waarom hebben we dit gekregen.
Het is omdat wat we toen net gingen doen, is dat we een aantal willekeurige gewichten willen genereren
die omgekeerd evenredig zijn met de grootte van het zwaartepunt, want inderdaad wat we nu
gaan doen is ons nieuwe netwerk nemen en.
Dan krijgt het zijn gewicht, dus door nog steeds het attribuutgewicht te nemen, dan zegt het zijn gegevens, dat is de
sensor zelf.
En dan gaan we vanuit dit zwaartepunt enkele willekeurige gewichten genereren die omgekeerd evenredig zijn met de
grootte van de Tenzer van gewichten.
En dus moeten we in deze uniforme functie nu een ondergrens zetten, die min W-grens zal zijn en de bovengrens,
die plus W bounce zal zijn.
OK, dus voor de gewichten en nu moeten we de bias en goed nieuws voor de bias initialiseren.
Het wordt veel eenvoudiger.
We gaan ze allemaal initialiseren met nullen.
Dus om deze aankopen te krijgen, nemen we ze natuurlijk uit ons model, dat is ons normale netwerk en dan is het
kenmerk voor de kopers kopers, dan hebben we toegang tot de gegevens en dan gaan we een methode
gebruiken, die is de film en de scoremethode, die, zoals je misschien al geraden had, wordt gebruikt om de Tenzer van
kopers met nullen te vullen.
Welnu, met nullen moeten we specificeren dat we het hier met nullen willen vullen.
En daarom voer ik hier nul in.
Oke.
Dus om samen te vatten, we genereren enkele willekeurige woorden die omgekeerd evenredig zijn met de grootte van het
zwaartepunt, en we initialiseren het apparaat met nullen.
Oke.
Dat was dus voor de initialisatie van de convolutieverbindingen.
En nu moeten we hetzelfde doen voor de volledige verbinding.
En dus gaan we een nieuwe voorwaarde toevoegen.
En als hetzelfde, we nemen deze truc, we gebruiken de eerste klas naam.
Dat is deze variabele die de verschillende namen van de verbindingen bevat.
Dus als de lestijd hetzelfde is, gebruiken we een gedefinieerde methode.
Waarop we deze keer tussen aanhalingstekens een volledige verbinding zetten die een klassieke lineaire verbinding is in een klassiek
kunstmatig neuraal netwerk.
De naam daarvoor is lineair en zeggen dat we deze truc gaan gebruiken om te zeggen dat we willen dat
het anders is dan min één.
Zodat deze zelfde boete uiteindelijk anders is dan min één betekent, als de verbinding de spijker is, dat is als we
een klassieke voedselverbinding hebben.
Dus in dat geval, hoe gaan we het gewicht initialiseren?
Nou, het zal ongeveer hetzelfde zijn.
We gaan een gewichtsvariabele introduceren die de eerste niet zal wissen, omdat we in dit of dat
geval zullen zijn.
Het zal dus niet hetzelfde zijn.
Dus dat kunnen we dan weer helemaal hergebruiken.
We gaan een ventilator in variabele introduceren, die deze keer niet gelijk zal zijn aan het product van deze
drie dimensies.
Maar eigenlijk zal het deze keer gelijk zijn aan gewoon.
Had ik er al een genoemd en dat komt omdat er voor de volledige verbinding minder verbindingen zijn dan bij een
convolutieverbinding.
Weet je, je zag dit in de intuïtieve lezingen in de CNN en de CNN's. Er is minder dimensie voor een volledige
verbinding dan voor een convolutie.
Dus eigenlijk nemen we deze dimensie een jaar, dan zullen we het heel goed moeten ontdekken, die dan
zal worden gebruikt om w-grenzen te berekenen.
En deze laatste dimensie wordt de gewichtsvorm van index nul.
Dat is de dimensie nul.
Goed dan om te berekenen dat het hetzelfde zal zijn.
Het wordt de vierkantswortel van zes gedeeld door de som van de overtreding en waaier uit zodat we gaan.
En dan is het goede nieuws dat het precies hetzelfde is als voorheen.
We gebruikten een uniforme functie voor de gewichten en de voelfunctie voor de bias om dezelfde soort initialisatie te krijgen,
deze keer met een andere bevinding en uitwaaiering en dus een andere W.
Dat is dus hetzelfde principe.
Dat is hetzelfde idee.
Het enige dat hier verandert, is dat we minder dimensies hebben voor de volledige verbinding en
daarom een eenvoudigere berekening van deze grens van de gewichten hebben om deze willekeurige gewichten te genereren.
Maar het goede nieuws is dat het nu klaar is, niet alleen dit wachten en de functie is klaar, maar nu hebben we onze tools en
dus zijn we klaar om te beginnen met het bouwen van de hersenen.
Dus ik kan niet wachten.
Dit wordt natuurlijk het spannendste deel.
Dit was gewoon om op te warmen en ons klaar te maken voor het grote ding.
Dus daar zullen we in de volgende tutorial voor zorgen.
Nou, eigenlijk zijn er verschillende tutorials voor nodig.
Natuurlijk beginnen we met het maken van de ogen.
En onthoud dan dat we een Ellerston toevoegen om de temporele eigenschappen van de invoer te leren kennen en dan zorgen we voor de
acteur en de criticus, en dat is waar we deze zullen gebruiken om te functioneren.
Genormaliseerde Cullum's Initialize en gewichten erin, zodat ik dat kan proberen.
We gaan nu iets heel krachtigs maken, dus bereid je erop voor.
Tot dan, geniet ervan.