RSS page de blog - 1/7 ==> Blog Azure (2) algorithme (3) blog (2) deep_learning (3) machine_learning (8) modules (5) pandas (3) programmation (3) references (2) setup (2) tutoriel (2)


page de blog - 1/7

mlxtend - tutorial sympathique - bootstrap

2018-02-08

Je viens de faire un petit tour sur la documentation de mlxtend et en particuler la liste des exemples : User Guide. Il y a le fameux graphe avec la base de données Iris qui représente les régions de décisions, le tout en une ligne : plot_decision_regions. La méthode bootstrap vaut aussi le détour.

article

Calcul distribué en Python (CPU)

2018-01-28

Le langage Python est très lent. C’est pourquoi la plupart les calculs scientifiques sont implémentés en C++ ou tout autre alternative à mi-chemin comme :epkg:`Cython` qui est presque un langage à part entière. La connaissance du C++ n’est pas indispensable mais elle facilite énormément la période d’apprentissage.

Il est toujours possible de parallèle les calculs en utilisant des threads mais le langage Python, pour éviter les erreurs d’exécution et garder le langage simple, protège tous les objects qu’il manipule contre les accès concurrentiels via une unique porte qu’on appelle le GIL. Il faut concevoir ce GIL comme une fil d’attente par laquelle le programme passe lors de son exécution pour lire ou modifier tout objet, toute classe, liste ou dictionnaire. Comme on y accède fréquemment, les programmes multithreads sont fortement ralentis au point de ne pas aller plus vite qu’un programme à un seul thread. Le GIL peut être désactivé mais il faut recourir à des outils comme :epkg:`Cython` ou au C++. Sans C++, des technologies comme OpenMP sont difficilement accessibles.

Une autre façon de paralléliser consiste à utiliser plusieurs processus, autrement dit, plusieurs interpréteurs Python tournent en même temps. L’inconvénient de cette méthode est que la mémoire n’est pas partagée : les processus peuvent travailler sur les mêmes données mais il faut qu’elles soient recopiées dans la mémoire de chacun. De même, les processus doivent communiquer entre eux pour partager le résultat de leurs calculs. Ce n’est pas compliqué en soi mais cela complique un peu l’écriture des programmes et cela les ralentit. Il faut communiquer le minimum d’information.

Des librairies ont été implémentées pour simplifier l’écriture de telles programmes comme joblib qui est la solution adoptée par scikit-learn. La première librairie sur le sujet fut MPI portée sous Python avec mpi4p. D’autres options existent comme dispy. Il vaut mieux vérifier la fréquence des mises à jour et le nombre de contributeurs avant d’utiliser une librairie.

pymp est une librairie à part car elle permet d’utiliser OpenMP en utilisant une particularité du système d’exploitation linux.

Une dernière option consiste à utiliser des modules qui convertissent des programmes Python en C++ comme numba. A l’exécution, numba détecte les types des variables manipulées et en déduit un code C++ équivalent, le compile et remplace la fonction Python par une version plus rapide. Ce faisant, il est possible de désactiver le GIL : nogil. La connaissance du C++ aide à comprendre comment écrire des bouts de code qui peuvent se passer du GIL. Néanmoins, la fonction ne crée aucun containeur, aucun tableau mais reçoit en paramètre tous ceux qu’elles doit modifier - ils sont donc créés au préalable -, le programme devrait tourner sans erreur d’exécution.

article

Saves and reload a pytorch model

2018-01-07

Saving and loading a pytorch model is something which took me a couple of searches on internet so let’s write it out. So to save a model:

import torch
model = create_model()  # create model
train_model(model)      # something which trains a models
torch.save(model.state_dict(), filename)

To load it:

import torch
model = create_model()  # create model
model.load_state_dict(torch.load(filename))

These two snippets of code assume that there exists a function which creates the model structure. This comes from the fact pytorch allows custom functions and they cannot be serialized with pickle.

article

Awesome quelque chose

2017-12-16

On voit de plus en plus d’exemples de repository GitHub qui références des listes d’articles ou de librairies qui sont awesome.

article

C++ depuis un notebook

2017-12-02

Il est maintenant possible de faire du C++ dans un notebook : Interactive Workflows for C++ with Jupyter. Ce langage s’ajoute à l’incroyable liste déjà disponible : Jupyter kernels. Ce petit tour de force repose sur Cling, un interpréteur pour C++ et Xeus qui implémente le kernel. L’article mentionne d’autres outils très sympathiques. Parmi eux, xtensor qui permet le calcul numérique sous C++. mybinder permet de dockeriser un repository github.

article

Resté informé sur le Deep Learning

2017-11-13

Un article qui suggèrent des blogs à lire :

Des cours filmés à Sanford :

Le deep learning est assimilé à une intelligence artificielle mais il n’est ni aussi performant qu’un cerveau humain, loin de là, ni aussi peu économoe en terme d’énergie : Les conséquences pratiques d’AlphaGo Zero.

article

Cours de deep learning appliqués au NLP

2017-11-13

Stanford University School of Engineering met en ligne beaucoup de cours dont les suivants Natural Language Processing with Deep Learning. C’est l’état de l’art cette année.

Une série d’articles sur le deep learning :

A propos des Generative Adversarial Networks :

Un résultat d’expérience qui est amené à prendre plus d’importance. Une couche d’un réseau de neurones profond est consistitué de plusieurs ensembles de neurones non connecté (des filtres). Ces filtres reçoivent tous les mêmes entrées. L’article proposent une façon de spécialiser chaque filtre plus rapidement en routant (en pondérant) les exemples entre chauqe couche.

Enfin :

article

Lectures sur Map Reduce, algorithme distribués

2017-11-10

Il arrive parfois de faire quelques trouvailles, des articles bien écrits qu’on se surprend à penser qu’il n’est plus besoin de préparer un support écrit. C’est le cas de cet article de blog MapReduce Patterns, Algorithms, and Use Cases. Je recommande également la lecture des autres articles de ce blog : Highly Scalable Blog. J’ai trouvé cette référence en parcourant les supports de cours de Roxana Geambasu comme Distributed Systems Fundamentals.

article

Algorithmes classiques implémentés

2017-11-04

Le module algorithms implémente beaucoup d’algorithmes classiques tels que la recherche binaire, le générateur de nombre aléatoire de Mersenne, le tri heapsort.

article

Après l’architecture Von Neumann

2017-10-26

Les ordinateurs d’aujourd’hui ne sont pas très éloignés de l”architecture Von Neumann qui place le processor CPU au centre de la machine. C’est l’architecture dans le cours proposé en dernière de l’école Anatomie et histoire d’un ordinateur.

source: wikipédia

L’article suivant suggère que cela pourrait changer : IBM scientists say radical new “in-memory” computing architecture will speed up computers by 200 times. L’article suivant est plus détaillé quant à l’innovation proposée : Temporal correlation detection using computational phase-change memory. L’idée principale consiste à déléguer certains calculs jusqu’alors réalisés par le processeur à une mémoire capable d’en prendre une partie en charge de façon parallèle. Cela signifie également qu’il est nécessaire de réécrire les algorithmes pour cette nouvelle architecture si on souhaite en tirer parti.

article


RSS page de blog - 1/7 ==> 2015-04 (5) 2015-05 (5) 2015-07 (2) 2015-08 (1) 2015-09 (2) 2015-12 (1) 2016-01 (6) 2016-03 (8) 2016-04 (1) 2016-05 (1) 2016-06 (1) 2016-08 (4) 2016-09 (2) 2016-10 (3) 2016-11 (4) 2016-12 (2) 2017-01 (2) 2017-02 (2) 2017-06 (1) 2017-08 (2) 2017-09 (4) 2017-10 (2) 2017-11 (4) 2017-12 (2) 2018-01 (2) 2018-02 (1)