Bonjour et bienvenue dans ce tutoriel, nous allons maintenant créer cette seconde fonction pour initialiser les poids.
Et celui-ci sera utilisé pour obtenir un apprentissage optimal.
En fait, ces poids.
Donc, la deuxième fonction que nous allons appeler poids soulignent en elle et prend comme argument
l'objet qui représente le réseau de neurones.
Donc c'est tout.
Et puis deux points et maintenant, entrons dans la fonction pour définir ce que nous voulions faire.
En gros, nous voulions donc initialiser les poids du nouveau réseau de manière à obtenir
un apprentissage optimal.
Donc, cela ne semblera pas particulièrement intuitif.
Ceci est basé sur des documents de recherche et des expériences.
Nous allons initialiser les poids d’une manière spécifique que nous n’avons pas vue auparavant, mais
croyez-moi, cela optimisera le processus d’apprentissage.
Nous avons donc simplement mis en œuvre sans entrer dans les détails de la raison pour laquelle nous initialisons les poids de cette façon.
Nous allons donc commencer par utiliser une astuce qui sera utilisée plus tard pour faire la
distinction entre la convolution et la connexion complète car vous savez que notre IA aura des yeux et qu’elle
aura donc des couches convolutives.
Et bien sûr, il aura également des couches entièrement connectées et nous aurons une initialisation différente
des poids pour ces deux types de connexions.
Nous allons donc utiliser cette astuce pour séparer ces deux types de connexions,
puis nous utiliserons certaines conditions pour obtenir une initialisation différente pour chacune de ces connexions.
Donc, cette astuce consiste à créer une nouvelle variable que nous allons appeler le nom de famille et qui sera
appelée à un objet ainsi et qui représente le réseau de neurones.
Mais c'est un objet que nous verrons plus tard.
Et nous allons obtenir l'attribut spécial de cet objet qui sera Kolesnik avec
double soulignement, première soulignement, double soulignement, double soulignement, encore une fois, nom et presque.
Un autre double soulignement.
Il s’agit donc d’une astuce assez moche pour rechercher le type de connexion de notre nouvel objet réseau, mais cela nous donnera exactement
ce que vous voulez.
Vous allez voir que ça va avoir du sens quand on commence si les conditions sont réunies.
Et en passant, en parlant de conditions, nous pouvons les arrêter tout de suite.
Et donc, ce que nous allons faire maintenant, c'est de commencer la première condition qui nous donnera le premier cas.
C'est-à-dire si la connexion est une convolution et écrire ainsi cette condition correctement si le nom de la classe est
correct.
Ici, nous utilisons une méthode, la méthode find, find et inside quand elles sont mises entre guillemets pour la convolution.
Et donc, si le nom de la classe trouve vraiment que nous pouvons faire, nous ferons une différence avec le moins un qui est réellement si
nous avons une convolution parce que Manasquan signifie non.
Dans ce cas, nous effectuerons une initialisation spéciale des poids.
Donc, cette condition signifie ici si nous avons une connexion de convolution.
Donc, dans ce cas, nous exécutons cette initialisation spécifique de la manière dont nous voulons procéder.
Et c’est là que vont venir toutes les choses qui ne sont pas intuitives.
Nous allons commencer par créer une variable que nous allons appeler.
Et cette forme de courtier pour que le poids souligne la forme sera une liste qui contiendra essentiellement la forme des
poids dans notre nouveau réseau.
Nous avons donc utilisé la fonction de liste pour créer une liste.
Et à l'intérieur, nous allons mettre dans le réseau neuronal ce poids qui sera le poids du réseau
neuronal.
Mais dans la connexion par convolution et pour obtenir la forme de ces poids, nous utilisons un
autre attribut, à savoir les données, puis taille, qui nous donnera la forme de ces poids dans la connexion par convolution.
Alors maintenant, poids de forme contient dans une liste la forme des poids et les connexions de convolution de
notre réseau et.
Très bien, nous avons alors une forme de poids pour initialiser les poids de cette connexion de convolution.
Nous allons avoir besoin de deux valeurs.
La première est le produit de la première dimension par la deuxième nomination par cette troisième dimension.
C’est ce que nous allons obtenir maintenant et nous devrons également obtenir les zéros d’ancienne fois la
deuxième fois et parfois la troisième dimension, puis nous utiliserons ces deux valeurs dans la compétition de la manière
dont nous initialisons les valeurs. poids.
Alors passons cela au travers de ce premier produit.
Nous appelons cela plaisir et cela correspondra au produit et nous allons utiliser la fonction prod
qui est une fonction non thaïlandaise qui a un raccourci et P So MP qui PRUD et à l'intérieur
prod produit.
Et comme nous l'avons dit, c'est le diamant et un deux et trois de notre poids.
Et donc pour obtenir cela, nous pouvons prendre une forme d'onde et obtenir les indices de ces trois moteurs de ligne.
Nous avons donc réglé Simonton sur un pouce et trois inclus.
Donc, un donjon pour exclus.
Et c'est comme ça que nous pouvons l'obtenir car la borne supérieure n'est pas incluse ici.
Donc, c'est ce que nous voulons, alors Même chose pour le plaisir, car nous avons dit Fan, ce sera le produit des dommages dans la
dimension temps zéro, deux fois que j'ai mentionné trois.
Et donc ici nous pouvons être indexés de deux inclus à quatre exclus.
Donc, cela deviendra le produit du temps et des deux et trois, puis nous pourrons le multiplier
par conception et zéro auquel nous pourrons avoir accès avec un indice zéro pour le navire de baleine.
Donc, pour résumer, c’est la fois deux fois sur trois et juste en dessous, nous avons zéro fois deux fois sur trois de
notre liste de poids.
Très bien, nous allons maintenant utiliser ces deux valeurs fan in et fan
out pour procéder à l’initialisation, car nous allons calculer une nouvelle valeur en appelant W lié, ce qui est égal à
la racine carrée. nous pouvons obtenir avec une fonction et P de et par cela comme qr t.
Deuxième comme avant.
Donc, la racine carrée de 6 divisée par déployer.
Alors, admirons-nous que nous ayons ce W représente ici en quelque sorte la taille des dizaines de
poids
Et pourquoi avons-nous eu cela.
C'est parce qu'alors que nous étions sur le point de faire maintenant est de générer des poids
aléatoires inversement proportionnels à la taille du tenseur des poids.
En effet, ce que nous sommes sur le point de faire maintenant consiste à exploiter notre nouveau réseau et à en peser le poids.
Donc, en prenant toujours le poids de l’attribut, accédez à ses données qui sont le tenseur lui-même.
Et ensuite, à partir de ce tenseur de poids, nous allons générer des poids aléatoires inversement
proportionnels à la taille des poids du tenseur.
Et donc dans cette fonction uniforme, nous devons maintenant définir une limite inférieure qui sera moins liée W et
la limite supérieure qui sera plus W arrière.
OK, c'est pour les poids.
Et maintenant, nous devons initialiser le biais et les bonnes nouvelles pour le biais.
Ça va être beaucoup plus simple.
Nous allons tous les initialiser avec des zéros afin d'obtenir ces achats nous les prenons de notre modèle qui est bien sûr
notre nouveau réseau.
Et puis l'attribut du biais est le biais alors même avec accès aux données.
Ensuite, nous allons utiliser une méthode qui est la méthode de soulignement Phil qui, comme vous l’auriez peut-être deviné, est utilisée pour remplir
le tenseur des biais avec des zéros, avec les règles que nous devons spécifier pour que nous voulions le remplir
avec des zéros ici.
Et voilà pourquoi je mets ici zéro.
Pour résumer, nous générons des poids aléatoires inversement proportionnels à la taille des poids du tenseur
et nous avons initialisé le périphérique avec des zéros.
Très bien, c'était donc pour l'action Initialize au niveau des connexions de convolution.
Nous devons maintenant faire de même pour la connexion complète.
Et donc nous allons ajouter une nouvelle condition et si même nous prenons cette astuce nous utilisons le premier nom de classe qui
est cette variable qui contient les différents noms des connexions.
Donc, si le nom de classe est le même, nous utilisons la méthode find à laquelle, cette fois-ci, une connexion complète est une
connexion linéaire classique dans un réseau de neurones artificiels classique.
Et si le nom pour cela est linéaire et dire que nous allons utiliser cette astuce pour dire que nous voulons
que ce soit différent de moins un, de sorte que cette fin de classe est que le beau linge est différent de moins un
signifie que si la connexion est en le là-bas si nous avons une connexion classique.
Donc, dans ce cas, comment allons-nous initialiser les poids.
Eh bien, ça va être tout à fait pareil.
Nous allons introduire Voivode Whaleship qui n'effacera pas le premier parce que nous allons soit dans ce
cas ou dans ce cas donc ce ne sera pas la même chose afin que nous puissions totalement l'inverser, puis
nous allons introduire un ventilateur dans la variable que ce temps ne sera pas égal au produit de ces
trois dimensions.
Mais en réalité, cette fois-ci, il sera simplement question de concevoir une mention.
Et c'est parce que pour la connexion complète, il y a moins de connexions que dans une connexion par convolution.
À la fin, c’est une conférence d’intuition et dans la section CNN, il est moins fait
mention d’une connexion complète que d’une convolution.
Donc, fondamentalement, nous prenons ce temps dans une année puis disons que nous allons avoir une variable
de ventilation qui sera ensuite utilisée pour calculer W. limites et cette domination sur fan va être poids forme de l'indice
0.
C'est le zéro des diamants.
Très bien alors à GWB et ça va être pareil.
Cela va être la racine carrée de 6 divisé par la somme incriminée et découvrez.
Alors on y va.
Et puis la bonne nouvelle est que c’est exactement la même chose que précédemment, nous utilisons la fonction
uniforme pour les poids et la fonction de remplissage pour le biais afin d’obtenir le même type d’initialisation cette fois-ci avec un ventilateur
différent, un ventilateur sortant et donc différent. .
Donc, c'est le même principe, c'est la même idée.
La seule chose qui change ici est que nous avons moins de dominations pour la
connexion complète et donc une considération plus simple de cette limite de pondération ici pour générer ces pondérations aléatoires.
Mais la bonne nouvelle est que, maintenant, ce n’est plus seulement ces poids et qu’il fonctionne très bien.
Mais maintenant nous avons deux outils.
Nous sommes donc prêts à commencer à construire le cerveau.
Donc je ne peux pas attendre.
Ce sera bien sûr la partie la plus excitante.
C'était juste pour se réchauffer et nous préparer pour le grand truc.
Nous allons donc nous en occuper dans le prochain tutoriel.
En fait, il faudra bien sûr plusieurs tutoriels.
Nous allons commencer par faire les yeux.
Et puis souvenez-vous que nous allons ajouter une illustration pour apprendre les propriétés temporelles de l'entrée, puis nous nous
occuperons de l'acteur et du critique.
Et c’est là que nous allons utiliser cela pour que la fonction normalisée vienne de l’initialiseur et des poids.
Donc j'ai hâte de faire ça.
Nous allons faire quelque chose de très puissant maintenant.
Alors préparez-vous pour ça.
Jusque-là, profitez de l'IA.