Slap/Slurn : Apprentissage et Algèbre en Scala

Description

Ce projet n’est plus maintenu. Il n’est pas compatible avec les dernières versions de Scala.

Une collection d’outils pour l’apprentissage statistique (a.k.a. machine learning) sous licence BSD et programmé en Scala. Sont inclus: la rétro-propagation (backpropagation), les RBMs, la Contrastive Divergence.

Le framework consiste en 3 librairies Scala compilées avec Maven :

  • Toolbox : Outils variés.
  • Slap (Scala Linear Algebra Package) : manipulation de matrices et vecteurs.
  • Slurn (Scala Learning) : tout ce qui est purement du machine learning.

Ces librairies peuvent être utilisées en Jar (voir fichiers Jar) ou installées localement dans votre repository maven (voir Maven repository).

Installation

Téléchargez les 3 paquets Maven (toolbox, slap and slurn) et choisissez l’une des méthodes d’installation ci-dessous.

Méthode 1: Fichiers Jar

Les fichiers jars peuvent être générés en lançant mvn package depuis le répertoire racine de chaque projet. Quand la compilation est terminée, le jar est situé dans le répertoire  »’target »’.

Méthode 2: Maven repository

Faites un mvn install pour les trois librairies pour les installer sur votre repository Maven.

Par exemple:

Manuel d’utilisation

Pour la suite, il est supposé que vous avez installé les paquets toolbox, slap et slurn avec succés et qu’ils sont disponibles dans votre classpath.

Paquet Toolbox

Parallélisme

Cette section décrit le parallélisme pour la version 0.1 et pas pour la version 0.2 et ne donne donc qu’une idée générale des fonctionnalités présentes dans la version 0.2..

Préparation

Pour utiliser le module, il vous suffit d’importer toutes les fonctions de l’objet Concurrency.

Les fonctions de Concurrency ne guarantissent pas que votre code est thread safe, c’est à vous de vous en assurer.

Les blocs parallèles

Les deux blocs { block 1 } et { block 2 } sont exécutés en parallèle. « andWait » est optionel et peut être utilisé pour indiquer que le thread principal doit attendre la complétion des blocs avant de continuer à la ligne suivante.

Il peut y avoir autant de blocs que nécessaire:

Utiliser execute

En utilisant execute, vous pouvez appeler une fonction de manière parallèle pour chacun des éléments d’une séquence. Par exemple, concurrentlyIn (1 until 5) execute { i => println(i) } va afficher parallèlement les entiers de 1 à 4.

Comme l’utilisation d’entiers est fréquente, vous pouvez directement donner les bornes de la séquence comme ceci:

Chaque fois que vous utilisez concurrentlyIn, il y aura Concurrency.numberOfthreads threads de créés pour executer la tâche. Par défaut, ce nombre de threads est le nombre de processeurs de votre machine mais vous pouvez le changer si nécessaire.

Ce code utilise 4 threads.

Utiliser enqueue

Souvent les exemples donnés plus haut ne sont pas optimaux car ils créent de nouveaux threads à chaque invocation. Si ce n’est pas ce que vous voulez faire, vous pouvez utiliser un pool de threads et ajouter des opérations à la volée.

Paquet Slap

Travailler avec des matrices

Exemple : création de Matrice

Paquet Slurn

Description

Diagrammes de classes pour les algorithmes et les modèles

RBMs

ANNs and backprop

DBNs

Fichiers