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