"Deep Learning from scratch-The théorie et implémentation du deep learning appris de Python" a été lu, donc la suite "Deep from scratch" Apprentissage ❷-Traitement du langage naturel ", mais le rythme de vie a changé en raison de l'influence de la nouvelle couronne, donc le temps d'étude était bon. Ne peut plus être fait. Jusqu'à présent, c'était une routine quotidienne de s'arrêter dans un café sur le chemin du retour du travail à l'étude, mais en ce qui concerne le télétravail, j'ai fini par vivre dans une bière 5 minutes après le travail: sueur_smile:
Ce n'est pas bon, je vais donc fouetter le corps d'Arafif et reprendre mes études. Comme pour Publié dans le volume précédent, je vais noter ce sur quoi je suis tombé par hasard dans ce livre, donc j'ai fait une erreur. Je vous serais reconnaissant de bien vouloir signaler ces problèmes.
Comme précédemment, nous allons procéder avec la machine virtuelle de Mac. Le système d'exploitation de la machine virtuelle a été mis à niveau de Mojave vers Catalina.
hôte | environnement |
---|---|
dur | Mac mini(Late 2012) |
OS | macOS Mojave version 10.14.6 |
Infrastructure de virtualisation | Parallels Desktop 15 pour Mac Pro Edition version 15.1.4 (47270) |
Les invités | environnement |
---|---|
OS | macOS Catalina version 10.15.4 |
Environnement de développement | Anaconda 2019.10 (Python 3.7) |
éditeur | Visual Studio Code Version 1.44.2 |
Il n'est peut-être pas possible d'exécuter une machine virtuelle sur une machine il y a huit ans et de faire du Deep Learning, mais le premier volume a réussi à le faire, alors je vais continuer. Pour plus d'informations sur mon environnement, veuillez vous référer au précédent Notez qu'un amateur a trébuché dans le Deep Learning à partir de zéro: Chapitre 1.
Dans la partie «À qui s'adresse le livre?» De la «Préface» de ce livre, «Ceux qui connaissent les réseaux de neurones et Python sont conçus pour pouvoir lire ce livre sans connaître les travaux précédents. Cependant, je pense qu'il est difficile de savoir combien de connaissances préalables devraient être nécessaires.
Ce chapitre 1 contient plus de la moitié du contenu du volume précédent, donc si vous êtes sur le point d'être frustré dans le chapitre 1, commencez par [premier volume](https://www.oreilly.co. Nous vous recommandons de lire jp / books / 9784873117584 /).
Ci-dessous, je vais énumérer les points sur lesquels je suis tombé, y compris les points que j'ai remarqués en raison des différences par rapport au volume précédent.
--J'ai récemment appris que le np.dot (x, y)
qui apparaît dans "1.1.4 Produit de Vector Inner Product et Matrix Product" peut également être écrit comme x @ y
en utilisant l'opérateur @
. Je pense que «@» est mieux, mais comme on dit que ce «@» peut être utilisé après Python 3.5, il se peut que la minorité utilise toujours «@». Je ne sais pas.
--Dans la mise en œuvre de "1.2.2 Implémentation de la classification et de la propagation vers l'avant en tant que couche", tous les poids sont maintenant répertoriés. Dans le volume précédent, le dictionnaire était stocké avec des clés pour chaque couche et biais (comme «« W1 »» et «« b1 »»), donc la politique de mise en œuvre a été modifiée.
――Dans l'explication de "1.3.4 Graphique de calcul", les types de nœuds de base expliqués au début ont augmenté par rapport au volume précédent (je me suis précipité dans le télétravail avec le volume précédent dans l'entreprise et je compte sur la mémoire, mais répétez L'explication du nœud, du nœud Sum et du nœud MatMul est-elle apparue comme un nœud de base?). Cela rend également l'explication de "1.3.5.2 Couche affine" plus facile à comprendre.
--Dans "1.3.4.5 MatMul node", il y a une explication selon laquelle l'utilisation d'un lecteur 3 points (...
) pour l'assignation à un tableau NumPy entraînera une copie complète. Il semble que la politique consiste à mettre l'accent sur l'efficacité et la vitesse d'utilisation de la mémoire plutôt que sur le volume précédent.
Cependant, l'explication selon laquelle l'utilisation d'un lecteur à 3 points comme destination de substitution crée une copie complète ne m'est pas venue à l'esprit, alors j'ai un peu enquêté. Apparemment, pour être précis, l'utilisation de slices dans ndarray crée un objet de vue, l'assignation de celui-ci écrase les données d'origine, et il existe un lecteur à 3 points comme abréviation pratique pour les slices. est.
Pour les objets de vue, [Explication of NumPy copy and view] de DeepAge (https://deepage.net/features/numpy-copyview.html) est expliqué, et pour le lecteur 3 points, nkmk Spécifiez la dimension du tableau NumPy ndarray en l'omettant avec Ellipsis (...) était facile à comprendre.
L'implémentation qui sélectionne au hasard les données dans le mini-lot de "1.4.3 Code source pour l'apprentissage" est numpy.random.permutation ()
en unités d'époque. /random/generated/numpy.random.permutation.html#numpy-random-permutation) a été modifié. Dans le premier volume, [numpy.random.choice ()
](https://numpy.org/doc/stable/reference/random/generated/numpy.random.choice.html#numpy-random-choice] pour chaque lot ), Il y avait donc une possibilité que les données utilisées entre les lots soient dupliquées, mais cette implémentation élimine la duplication.
De même, dans "1.4.3 Code source pour l'apprentissage", lorsque vous exécutez le code source du livre, la limite de décision est visualisée, mais il est clair que la limite est détectée par une méthode spéciale et la plage est remplie. Je me suis demandé si je le faisais Code source J'ai juste déduit les coordonnées en arrondissant et tracé les résultats. En parlant bien sûr, c'est naturel, mais c'est un peu boueux et intéressant. Il existe également des fonctions utiles telles que numpy.meshgrid ()
. Le grand avantage de Python (NumPy? Matplotlib?) Est que vous pouvez faire de telles visualisations en quelques lignes.
――Je pense que l'explication de "1.4.4 Trainer class" n'était pas dans le premier volume (le premier volume est toujours dans le télétravail en tant qu'entreprise), mais code source du premier volume -japan / deep-learning-from-scratch / blob / master / common / trainer.py) a déjà été adopté.
―― La "précision 1.5.1 bit" a été brièvement expliquée dans le dernier chapitre du volume précédent, mais l'utilisation de la virgule flottante 16 bits a commencé concrètement. Cependant, puisqu'il s'agit d'une période transitoire, la politique est de l'appliquer uniquement lors du stockage des poids pour réduire la capacité. «La même chose est vraie pour" 1.5.2 GPU (CuPy) ", et bien que ce ne soit qu'une explication légère dans le volume précédent, l'utilisation de CuPy a commencé. Cependant, comme il est fondamentalement implémenté par le CPU, il n'y a pas de GPU.
Étant donné que l’accent était mis sur la révision du volume précédent, il n’y avait pas d’obstacle majeur. C'est bien que le code source ait été amélioré de différentes manières.
C'est tout pour ce chapitre. Si vous avez des erreurs, je vous serais reconnaissant de bien vouloir les signaler.