"Deep Learning from scratch" avec Haskell (inachevé)
C'est la fin d'année et le nouvel an! Écrivons le code!
J'ai donc tenté le défi de «faire l'apprentissage profond à partir de zéro avec Haskell».
Pourquoi utiliser Haskell?
- Haskell est cool, non?
- Cela n'a pas bon goût si vous suivez simplement le livre
- Il semble y avoir fusion, et même dans le domaine du Deep Learning où l'efficacité du calcul est susceptible d'être requise, Haskell est en fait N'est-ce pas approprié? Je voulais vérifier que
Conclusion
** Échec. Haskell n'était pas assez fort **
Je vais vous donner le code que j'ai écrit avec le sentiment que je peux surmonter mon cadavre.
https://github.com/spinylobster/my-deep-learning-from-scratch-in-haskell
~~ Les progrès ne sont pas bons du tout, j'ai écrit le raisonnement et l'apprentissage du réseau neuronal, mais je n'ai pas confirmé l'apprentissage réel
Puisque la méthode de propagation de retour d'erreur n'a pas été implémentée, on a l'impression qu'elle se trouve au milieu du chapitre 4 ~~
- Ajout 2017/1/9: Un peu avancé, l'état où l'apprentissage du réseau neuronal s'est achevé
J'implémente également AdaGrad, donc j'ai l'impression que c'est au milieu du chapitre 6 *
La puissance de Haskell est faible, donc le code est compliqué et il ne suit pas le code du livre, mais cela peut être une référence lors de l'utilisation de diverses bibliothèques
Ce que tu penses est la cause
- J'ai passé trop de temps à étudier Haskell
- Réapprendre les connaissances oubliées, comment utiliser Stack, le convertisseur monade, la sérialisation des données, etc.
- À l'origine, j'ai fait Wow H book il y a quelques années.
- J'ai passé beaucoup de temps à comprendre comment utiliser Gnuplot
- J'avais un calcul qui devait avoir un état, mais je ne savais pas l'écrire
- ~~ Le calcul de la matrice n'est pas sûr et j'ai souffert d'erreurs d'exécution ~~ -> ** type Il semble qu'un calcul sûr soit possible! **
- Très difficile de déboguer l'état de fonctionnement dans Haskell
Ce que j'ai utilisé
- Stack - Sans cela, vous pouvez installer chaque paquet.
- Haskell Super Primer - Pour se souvenir de la grammaire de base
- HMatrix - L'équivalent de NumPy. Calcul matriciel. Il semble y avoir Repa, et j'ai prévu de comparer les performances plus tard.
- Gnuplot - Équivalent à matplotlib. Dessiner un graphique. Pour comprendre comment l'utiliser, il est rapide de voir ici
- Débogueur GHCi - J'ai d'abord appris son existence. L'évaluation des délais et le débogueur semblent incompatibles. C'était vraiment difficile à utiliser
- Autres bibliothèques - voir le fichier cabal
Impressions du livre
- ** Insanely good ** Facile à comprendre
- Il couvre tout, de l'introduction au réseau neuronal à ce que vous devriez apprendre à l'avenir. ** Je pense qu'il n'y a pas de meilleur livre d'introduction **
- Cependant, je ne comprends pas vraiment l'essentiel du deep learning.
- Je ne comprends pas l'intention de conception de la couche de convolution CNN
- Je pense qu'il est possible que je ne l'ai pas écrit moi-même
- Je veux le comprendre avec d'autres matériaux
URL utile
- Préparez l'environnement Haskell avec VS Code
- http://qiita.com/DUxCA/items/8e7a68ffee522bdd8918
- Installez gnuplot sur Mac
- http://mashiroyuya.hatenablog.com/entry/installgnuplot
- Utilisez gnuplot de Haskell
- http://d.hatena.ne.jp/mmitou/20120912/1347441319
- Comprendre comment utiliser hMatrix
- https://github.com/albertoruiz/hmatrix/tree/master/examples
- Vous pouvez utiliser
+ - * /
pour les calculs élément par élément
- La carte de la matrice est
cmap
Je pense qu'il y a des moments où des émissions telles que * matrix * 2
peuvent être faites et des moments où elles ne le peuvent pas. je ne suis pas sûr
- Impressions de la bibliothèque Haskell 2016
- http://syocy.hatenablog.com/entry/haskell-library-2016
- Programmation au niveau du type avec Haskell
- http://konn-san.com/articles/2012-06-07-promoted-types-and-list-arguments.html