2017-06-16 4 views
1

Ich versuche, das neurale Netzwerktraining mithilfe der Keras-Schnittstelle von RStudio reproduzierbar zu machen. Das Setzen eines Seeds im R-Skript (set.seed(42)) scheint nicht zu funktionieren. Ist es möglich, das Seeding als Argument an layer_dense() zu übergeben? Ich kann RandomUniform als Initialisierer wählen, aber ich habe Schwierigkeiten, ein Seeding-Argument mit ihm zu übergeben. Die folgende Zeile wirft einen Fehler:Mit der Keras-Schnittstelle von RStudio das Training neuronaler Netzwerke reproduzierbar machen

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

Aber eine Schicht kann, ohne den Versuch, hinzugefügt werden, um ein Samen Argument übergeben:

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

RandomUniform ist wohl ein Samen Argument nehmen nach die .

+0

ich keras in python verwenden und es scheint zu funktionieren, wenn ich 'set.seed (42)' und 'Import tensorflow',' tensorflow.set_seed (42) '. Kannst du Tensorflow explizit in R importieren und ausprobieren? Außerdem funktioniert es nur, wenn mit CPUs gearbeitet wird, nicht mit GPUs. –

+0

Ich denke, ich sollte versuchen, die R-Tensorflow-Bibliothek anstelle der R-Keras-Bibliothek zu verwenden, weil Keras in Tensorflow 1.2 integriert ist –

Antwort

0

Kernel-Initialisierer Argument Syntax sollte so sein. kernel_initializer=initializer_random_uniform(minval = -0.05, maxval = 0.05, seed = 104)

Versuchen Sie diese Schritte.

1) Set Samen für R Umgebung vor Keras/tensorflow

2) Set tensorflow Sitzungskonfiguration verwenden einzelnen Thread

3) Setzen tensorflow Zufallssaat

4) Erstellen tensorflow Sitzung mit dem Import Diesen Seed und es Keras Backend zuweisen.

5) Schließlich in Ihrem Modell Schichten, wenn Sie zufällig initializers wie random_uniform verwenden (dies ist die Standardeinstellung eins) oder random_normal dann werden Sie das Samen Argument zu einem gewissen ganzzahligen Unten ist ein Beispiel ändern müssen

# 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)) 

Referenzen: 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

Verwandte Themen