2017-06-16 2 views
1

J'essaie de rendre l'entraînement du réseau neuronal reproductible en utilisant l'interface Keras de RStudio. Définir une graine dans le script R (set.seed(42)) ne semble pas fonctionner. Est-il possible de passer l'ensemencement comme argument à layer_dense()? Je peux choisir RandomUniform comme initialiseur mais j'ai de la difficulté à passer un argument de semis avec. La ligne suivante renvoie une erreur:Rendre l'entraînement du réseau neuronal reproductible en utilisant l'interface Keras de RStudio

model %>% layer_dense(units = 12, activation = 'relu', input_shape = c(8), kernel_initializer = "RandomUniform(seed=1)")

Mais une couche peut être ajoutée sans la tentative de passer un argument de semences:

model %>% layer_dense(units = 12, activation = 'relu', input_shape = c(8), kernel_initializer = "RandomUniform")

RandomUniform est supposé prendre un argument de semences selon le Keras initializer documents.

+0

J'utilise keras en python et il semble fonctionner quand je 'set.seed (42)' et 'tensorflow' d'importation,' tensorflow.set_seed (42) '. Pouvez-vous importer explicitement tensorflow dans R et essayez cela? En outre, cela ne fonctionne que lorsque vous travaillez avec des processeurs, pas avec des GPU. –

+0

Je pense que je devrais essayer d'utiliser la bibliothèque R Tensorflow au lieu de la bibliothèque R Keras parce que Keras est intégré dans Tensorflow 1.2 –

Répondre

0

La syntaxe de l'argument d'initialisation du noyau doit ressembler à ceci. kernel_initializer=initializer_random_uniform(minval = -0.05, maxval = 0.05, seed = 104)

Essayez ces étapes.

1) des graines pour l'environnement de R avant d'importer keras/tensorflow

2) Définir configuration de session tensorflow à utiliser seul fil

3) des graines

4) tensorflow aléatoire Créer tensorflow session, cette graine et l'assigner à Keras backend.

5) Enfin, dans les couches de votre modèle, si vous utilisez initializers aléatoires comme random_uniform (ce qui est le défaut) ou random_normal alors vous devrez changer l'argument des semences à un entier Ci-dessous un exemple

# Set R random seed 
set.seed(104) 
library(keras) 
library(tensorflow) 

# TensorFlow session configuration that uses only a single thread. Multiple threads are a 
# potential source of non-reproducible results, see: https://stackoverflow.com/questions/42022950/which-seeds-have-to-be-set-where-to-realize-100-reproducibility-of-training-res 
#session_conf <- tf$ConfigProto(intra_op_parallelism_threads = 1L, 
#        inter_op_parallelism_threads = 1L) 

# Set TF random seed (see: https://www.tensorflow.org/api_docs/python/tf/set_random_seed) 
tf$set_random_seed(104) 

# Create the session using the custom configuration 
sess <- tf$Session(graph = tf$get_default_graph(), config = session_conf) 

# Instruct Keras to use this session 
K <- backend() 
K$set_session(sess) 


#Then in your model architecture, set seed to all random initializers. 

model %>% 
    layer_dense(units = n_neurons, activation = 'relu', input_shape = c(100),kernel_initializer=initializer_random_uniform(minval = -0.05, maxval = 0.05, seed = 104)) %>% 
    layer_dense(units = n_neurons, activation = 'relu',kernel_initializer=initializer_random_uniform(minval = -0.05, maxval = 0.05, seed = 104)) %>% 
    layer_dense(units =c(100) ,kernel_initializer=initializer_random_uniform(minval = -0.05, maxval = 0.05, seed = 104)) 

Références: https://rstudio.github.io/keras/articles/faq.html#how-can-i-obtain-reproducible-results-using-keras-during-development https://rstudio.github.io/keras/reference/initializer_random_normal.html#arguments