knitr::opts_chunk$set(echo = TRUE)
library(keras)
library(ggplot2)
library(dplyr)
library(corrplot) # pour représenter la matrice des corrélations empiriques
library(factoextra) # pour avoir des représentations graphiques pour l'ACP
library(tensorflow)
#library(reticulate)
# use_miniconda("r-reticulate")
if (tensorflow::tf$executing_eagerly()) {
tensorflow::tf$compat$v1$disable_eager_execution()
}
K <- keras::backend()
Il existe deux grandes “bibliothèques logicielles” pour faire de l’apprentissage profond (deep learning).
Pytorch est une “bibliothèque logicielle” écrite en C++, Python et C, basée sur Torch, développée par les équipes d’intelligence artificielle (IA) de Facebook, déposée en open source sur GitHub en 2017. Selon les blogs, Pytorch est réputé être plutôt pour les développeurs orientés recherche, plus convivial, plus facile à adapter et debugger.
TensorFlow est une plateforme Open-Source, proposant un ensemble complet et flexible d’outils, bibliothèques et ressources communautaires pour le “machine learning”. C’est aussi une bibliothèque logicielle pour le calcul numérique utilisant des graphiques de flux de données. Les noeuds représentent des fonctions mathématiques et les arêtes des tableaux multidimensionnels (tenseurs) communiquant entre eux. TensorFlow a été développé par les équipes de Google et publié en 2015. Le “+” revendiqué est le côté écosystème complet, pas besoin de gérer CPU/GPU et facilitation de mise en production d’outils liés à l’IA.
Keras est une interface “high-level” pour construire et entraîner des modèles d’apprentissage profond, développée par F. Chollet et qui sert d’interface pour TensorFlow, mais aussi The MicroSoft Cognitive ToolKit and Theano. Keras ne se charge pas directement des opérations de bas niveau comme les produits ou les convolutions de Tensor, et s’appuie sur un moteur backend (par exemple TensorFlow). Keras inclut aussi des ensembles de données et des modèles bien connus, pré-entraînés (sur ImageNet).
Il semble qu’aujourd’hui les deux ont travaillé sur leurs points faibles.
Il existe des bibliothèques R de mêmes noms que celles Python, tensorflow, keras, torch.
torch : construction sur PyTorch C++, pas de dépendance à Python, installation plus facile.
Il existe un projet RStudio autour de TensorFlow https://tensorflow.rstudio.com/ (et donc documentation assez complète) Pour les utilisateurs de R, tensorflow et keras sont basés sur reticulate et revient à utiliser des packages Python depuis R.
L’interface Keras a été portée sous R par JJ. Allaire, et évolue avec la philosophie “make it R-like and natural, where possible and make it easy to port from Python, where necessary”. Vous pouvez lire l’article de blog ci-dessous pour plus d’infos sur les dernières évolutions. Il existe aussi le livre Deep Learning with R écrit par F. Chollet et JJ Allaire dont une deuxième version est attendue sous peu.
“Cheatsheet” pour le package R keras https://raw.githubusercontent.com/rstudio/cheatsheets/master/keras.pdf
Comprendre les commandes permettant de construire et entraîner un autoencodeur (variationnel) avec le package keras, depuis RStudio, avec un objectif de réduction de dimension.
Quelques ateliers passés autour de l’apprentissage profond :
Un atelier Happy R avait déjà été proposé autour des réseaux de neurones par Sophie Donnet et Christophe Ambroise : (https://stateofther.netlify.app/post/introduction-au-deep-learning-sous-r/)
Un autre plus récent a été proposé, avec code Python (pytorch ou keras), par Charles Ollion sur l’apprentissage profond bayésien (https://stateofther.netlify.app/post/bayesian-deep-learning/)
Pour installer tensorflow et keras et travailler depuis RStudio, suivre les consignes d’installation disponibles ici.
Sous Ubuntu, on est un peu pris par la main. Installer les packages keras et tensorflow.
Si TensorFlow n’est pas installé sur notre machine, il suffira de lancer la fonction tensorflow::install_tensorflow()
mais là encore, vous devriez avoir un message explicite. Si besoin on vous proposera d’installer Miniconda.
Pour vérifier son installation tensorflow :
library(tensorflow)
tf$constant("Hellow Tensorflow")
Possiblement on verra apparaître des messages d’erreur qui en fait ne concernent que les calculs sur GPU. Si vous n’avez pas de carte GPU ou ne souhaitez pas faire de calculs sur GPU vous pouvez ignorer les messages.
Si vous souhaitez pouvoir utiliser les fonctionnalités GPU, vous aurez sans doute besoin d’installation supplémentaire.
Remarque : pour avoir des infos sur sa carte graphique sous Ubuntu, taper lspci | egrep "3D|VGA"
dans une console.
Pour définir le modèle puis l’ajuster, on utilisera toujours les étapes suivantes.
Dans keras on assemble des couches pour construire un modèle (mode de construction le plus courant est le mode séquentiel).
layer_input(shape = NULL)
layer_dense(object, units, activation = NULL, use_bias = TRUE, input_shape = NULL)
Outre la fonction d’activation à spécifier, les schémas d’initialisation des poids (kernel_initializer
) ou de régularisation des poids (kernel_regularizer
) peuvent être importants.
compile(loss='mean_squared_error', optimizer='sgd')
optimizer
: optimiseur, souvent "rmsprop"
par défaut.
loss
: fonction de perte à minimiser.
metrics
: métriques à évaluer pendant l’entrainement et le test du modèle.
Ex : pour de la classification
optimizer = 'adam', loss = 'categorical_crossentropy', metrics = list('accuracy')
fit
)fit(object, x = NULL, y = NULL, bath_size = NULL, epochs = 10)
epochs
: l’apprentissage est structuré en ‘epochs’, ie itération sur le jeu entier de données (ce qui fait en lots (‘batches’) plus petits).
batch_size
: le modèle découpe les données en lots plus petits et itèrent sur chaque lote pendant l’entrainement. Attention si le nombre total d’échantillons n’est pas divisible par la taille du lot, le dernier batch doit être le plus petit.
predict
)Nous considérerons le jeu de données “vin rouge” de la base de données de vins portugais “Vinho Verde”. Nous disposons de 12 variables physico-chimiques et sensorielles, dont une variable de quality de vin correspondant à un score entre 0 et 10. Une courte description de chaque variable est disponible ici. Les données sont utilisées à titre purement illustratif.
wine <- read.csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv", sep = ";")
#quality <- wine$quality<6
#wine2 <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data", sep = ",")
# Taille du jeux de données
dim(wine)
## [1] 1599 12
# Aperçu des premières lignes
head(wine[,-12])
## fixed.acidity volatile.acidity citric.acid residual.sugar chlorides
## 1 7.4 0.70 0.00 1.9 0.076
## 2 7.8 0.88 0.00 2.6 0.098
## 3 7.8 0.76 0.04 2.3 0.092
## 4 11.2 0.28 0.56 1.9 0.075
## 5 7.4 0.70 0.00 1.9 0.076
## 6 7.4 0.66 0.00 1.8 0.075
## free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol
## 1 11 34 0.9978 3.51 0.56 9.4
## 2 25 67 0.9968 3.20 0.68 9.8
## 3 15 54 0.9970 3.26 0.65 9.8
## 4 17 60 0.9980 3.16 0.58 9.8
## 5 11 34 0.9978 3.51 0.56 9.4
## 6 13 40 0.9978 3.51 0.56 9.4
# Résumé
summary(wine)
## fixed.acidity volatile.acidity citric.acid residual.sugar
## Min. : 4.60 Min. :0.1200 Min. :0.000 Min. : 0.900
## 1st Qu.: 7.10 1st Qu.:0.3900 1st Qu.:0.090 1st Qu.: 1.900
## Median : 7.90 Median :0.5200 Median :0.260 Median : 2.200
## Mean : 8.32 Mean :0.5278 Mean :0.271 Mean : 2.539
## 3rd Qu.: 9.20 3rd Qu.:0.6400 3rd Qu.:0.420 3rd Qu.: 2.600
## Max. :15.90 Max. :1.5800 Max. :1.000 Max. :15.500
## chlorides free.sulfur.dioxide total.sulfur.dioxide density
## Min. :0.01200 Min. : 1.00 Min. : 6.00 Min. :0.9901
## 1st Qu.:0.07000 1st Qu.: 7.00 1st Qu.: 22.00 1st Qu.:0.9956
## Median :0.07900 Median :14.00 Median : 38.00 Median :0.9968
## Mean :0.08747 Mean :15.87 Mean : 46.47 Mean :0.9967
## 3rd Qu.:0.09000 3rd Qu.:21.00 3rd Qu.: 62.00 3rd Qu.:0.9978
## Max. :0.61100 Max. :72.00 Max. :289.00 Max. :1.0037
## pH sulphates alcohol quality
## Min. :2.740 Min. :0.3300 Min. : 8.40 Min. :3.000
## 1st Qu.:3.210 1st Qu.:0.5500 1st Qu.: 9.50 1st Qu.:5.000
## Median :3.310 Median :0.6200 Median :10.20 Median :6.000
## Mean :3.311 Mean :0.6581 Mean :10.42 Mean :5.636
## 3rd Qu.:3.400 3rd Qu.:0.7300 3rd Qu.:11.10 3rd Qu.:6.000
## Max. :4.010 Max. :2.0000 Max. :14.90 Max. :8.000
wine %>%
select_if(is.numeric) %>%
cor() %>% # Calcul de la matrice de corrélation empirique
corrplot::corrplot() # représentation graphique de la matrice