Intégrer keras dans un document RMarkdown

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Nicolas Halter
Messages : 23
Enregistré le : 25 Juin 2021, 08:30

Intégrer keras dans un document RMarkdown

Messagepar Nicolas Halter » 05 Jan 2022, 15:37

Bonjour,

Je cherche à créer un rapport pdf avec RMarkdown, généralement j'arrive à mes fins sans problème. Sauf que cette fois-ci je besoin d'utiliser le package keras, et je n'arrive plus à produire du document pdf car R n'arrive plus à compiler à partir du moment où il lui faut entrainer le réseau de neurone.

Voilà le chunk que j'ai entré :

Code : Tout sélectionner


library(tidyverse)
library(caret)
library(rpart.plot)
library(keras)

# Importation des données
Cancer <- as_tibble(read.csv("METABRIC.csv",sep=",")) # si vous voulez le trouver, il est disponible sur kaggle : https://www.kaggle.com/raghadalharbi/breast-cancer-gene-expressionprofiles-metabric

# Binarisation de la variable cible
Cancer <- Cancer %>% mutate(death_from_cancer=as.factor(ifelse(death_from_cancer=="Died of Disease","oui","non")))

# Suppression des variables inutiles
Cancer <- Cancer %>% select(-c(patient_id,type_of_breast_surgery,cancer_type,
                               cancer_type_detailed,cellularity,chemotherapy,
                               pam50_._claudin.low_subtype,cohort,
                               er_status_measured_by_ihc,er_status,
                               neoplasm_histologic_grade,
                               her2_status_measured_by_snp6,
                               her2_status,tumor_other_histologic_subtype,
                               hormone_therapy,inferred_menopausal_state,
                               integrative_cluster,primary_tumor_laterality,
                               lymph_nodes_examined_positive,
                               nottingham_prognostic_index,oncotree_code,
                               overall_survival,overall_survival_months,
                               pr_status,radio_therapy,
                               X3.gene_classifier_subtype,tumor_stage))

# Suppression des individus ayant au moins une donnée manquante
Cancer <- Cancer %>% drop_na(mutation_count,tumor_size)

# Binarisation des variables de mutations
modif <- which(str_detect(colnames(Cancer), "_mut"))

Cancer <- Cancer %>% mutate_at(modif,function(x) as.factor(ifelse((x=="0")
                                                                  |(is.na(x)),
                                                                  0,1)))

# Création des variables cible et explicatives
CancerX <- Cancer %>% select(-death_from_cancer)
CancerY <- Cancer %>% select(death_from_cancer)

# Division en apprentissage et test

apprentissage <- createDataPartition(y=Cancer$death_from_cancer,
                                     p=0.667,
                                     list=F)
PourApprendre <- Cancer %>% slice(n=apprentissage)
PourTest <- Cancer %>% slice(n=-apprentissage)

PourApprendreX <- PourApprendre %>% select(-death_from_cancer)
PourApprendreY <- PourApprendre %>% select(death_from_cancer)
PourTestX <- PourTest %>% select(-death_from_cancer)
PourTestY <- PourTest %>% select(death_from_cancer)

# Mise en forme pour le futur réseau de neurone
i <- c(1:ncol(PourApprendreX))
PourApprendreX_Neurone <- apply(PourApprendreX[,i],
                                2,
                                function(x) as.numeric(as.character(x)))
PourTestX_Neurone <- apply(PourTestX[,i],
                           2,
                           function(x) as.numeric(as.character(x)))

PourApprendreY_Neurone <- PourApprendreY %>% mutate(death_from_cancer=ifelse(death_from_cancer=="oui",1,0))
PourTestY_Neurone <- PourTestY %>% mutate(death_from_cancer=ifelse(death_from_cancer=="oui",1,0))

modele <- keras_model_sequential()
modele %>%
  layer_dense(input_shape = ncol(PourApprendreX), activation = "relu", units = 166) %>%
  layer_dense(activation = "sigmoid", units = 2)

modele %>% compile(loss="categorical_crossentropy",
                   optimizer = "rmsprop",
                   metrics = c("accuracy"))

history <- modele %>% fit(PourApprendreX_Neurone, PourApprendreY_Neurone,
                          epochs = 3, batch_size = 100,
                          validation_split = 0.2)


Je reçois alors l'erreur suivante :

Code : Tout sélectionner

Line 33 Error in py_call_impl(callable, dots$args, dots$keywords) : valueError: in user code: File "C:\Users\Admin\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\keras\engine\training.py",line 878, in train_function * return step_function(self, iterator) File "C:\Users\Admin\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\keras\engine\training.py", line 867, in step_function ** outputs = model.distribute_strategy.run(run_step,args=(data,)) File "C:\Users\Admin\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\keras\engine\training.py", line 860, in run_step ** outputs = model.train_step(data) File "C:\Users\Admin\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\keras\engine\training.py", line 810, in train_step y, y_pred, sample_weight, regularization_losses=self.losses) File "C:\Users\Admin\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\keras\engine\compile_utils.py", line 180, in __call__y_true = self._conformto_outputs(y_pred, y_true) Calls: <Anonymous> ... fit.keras.engine.training.Model -> do.call -> <Anonymous> -> py_call_impl Exécution arrêtée


Je précise que le code du chunk fonctionne parfaitement en dehors de RMarkdown.

Quelqu'un aurait une idée ?

PS : désolé de ne pas avoir de code reproductible

Cordialement,
Nicolas

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Intégrer keras dans un document RMarkdown

Messagepar Mickael Canouil » 05 Jan 2022, 19:48

Bonjour,

personnellement et en partie pour ce genre de chose, j'ai déporté le calcul en dehors du rapport, via soit l'écriture d'un "_targets.R" (avec des `tarchetypes::tar_render()` des des `targets::tar_read()` dans le rapport) ou pour combiner quand même les deux un "_targets.Rmd".
https://books.ropensci.org/targets/

L'erreur vient probablement de :
- Chemin de fichier
- Environnement R et système

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Nicolas Halter
Messages : 23
Enregistré le : 25 Juin 2021, 08:30

Re: Intégrer keras dans un document RMarkdown

Messagepar Nicolas Halter » 06 Jan 2022, 14:28

Bonjour,

J'ai relancé le code aujourd'hui et maintenant tout est bon...

Merci quand même pour votre réponse Mickael.

Cordialement,
Nicolas


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité