2017-07-24 5 views
0

Ich versuche, ein siamesisches Netzwerk mit Rstudio Keras-Paket zu implementieren. Das Netzwerk, das ich versuche zu implementieren, ist das gleiche Netzwerk, das Sie in this post sehen können.Siamesisches Netzwerk mit Rstudio Keras

Also, im Grunde portiere ich den Code auf R und mit Rstudio Keras Implementierung. Bisher mein Code sieht wie folgt aus:

library(keras) 

    inputShape <- c(105, 105, 1) 
    leftInput <- layer_input(inputShape) 
    rightInput <- layer_input(inputShape) 

    model<- keras_model_sequential() 

    model %>% 
     layer_conv_2d(filter=64, 
        kernel_size=c(10,10), 
        activation = "relu", 
        input_shape=inputShape, 
        kernel_initializer = initializer_random_normal(0, 1e-2), 
        kernel_regularizer = regularizer_l2(2e-4)) %>% 
     layer_max_pooling_2d() %>% 

     layer_conv_2d(filter=128, 
        kernel_size=c(7,7), 
        activation = "relu", 
        kernel_initializer = initializer_random_normal(0, 1e-2), 
        kernel_regularizer = regularizer_l2(2e-4), 
        bias_initializer = initializer_random_normal(0.5, 1e-2)) %>% 
     layer_max_pooling_2d() %>% 

     layer_conv_2d(filter=128, 
        kernel_size=c(4,4), 
        activation = "relu", 
        kernel_initializer = initializer_random_normal(0, 1e-2), 
        kernel_regularizer = regularizer_l2(2e-4), 
        bias_initializer = initializer_random_normal(0.5, 1e-2)) %>% 
     layer_max_pooling_2d() %>% 

     layer_conv_2d(filter=256, 
        kernel_size=c(4,4), 
        activation = "relu", 
        kernel_initializer = initializer_random_normal(0, 1e-2), 
        kernel_regularizer = regularizer_l2(2e-4), 
        bias_initializer = initializer_random_normal(0.5, 1e-2)) %>% 

     layer_flatten() %>% 
     layer_dense(4096, 
        activation = "sigmoid", 
        kernel_initializer = initializer_random_normal(0, 1e-2), 
        kernel_regularizer = regularizer_l2(1e-3), 
        bias_initializer = initializer_random_normal(0.5, 1e-2)) 

    encoded_left <- leftInput %>% model 
    encoded_right <- rightInput %>% model 

Wenn jedoch die letzten beiden Zeilen ausgeführt wird, erhalte ich die folgende Fehlermeldung:

Error in py_call_impl(callable, dots$args, dots$keywords) : 
    AttributeError: 'Model' object has no attribute '_losses' 

Detailed traceback: 
    File "/home/rstudio/.virtualenvs/r-tensorflow/lib/python2.7/site-packages/tensorflow/contrib/keras/python/keras/engine/topology.py", line 432, in __call__ 
    output = super(Layer, self).__call__(inputs, **kwargs) 
    File "/home/rstudio/.virtualenvs/r-tensorflow/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 441, in __call__ 
    outputs = self.call(inputs, *args, **kwargs) 
    File "/home/rstudio/.virtualenvs/r-tensorflow/lib/python2.7/site-packages/tensorflow/contrib/keras/python/keras/models.py", line 560, in call 
    return self.model.call(inputs, mask) 
    File "/home/rstudio/.virtualenvs/r-tensorflow/lib/python2.7/site-packages/tensorflow/contrib/keras/python/keras/engine/topology.py", line 1743, in call 
    output_tensors, _, _ = self.run_internal_graph(inputs, masks) 
    File "/home/rstudio/.virtualenvs/r-tensorflow/lib/python2.7/site-packages/tensorflow/contrib/keras/python 

Ich habe bei ähnlichen Implementierungen und alle Fragen über Stackoverflow suchen, aber ich konnte keine Lösung finden. Ich denke, ich könnte etwas wirklich Offensichtliches vermissen.

Irgendwelche Ideen, um das zu lösen?

+1

Das läuft in meinem Computer gut. Versuchen Sie, das R-Keras-Paket und Ihre Tensorflow-Installation zu aktualisieren. –

+0

Oh schnappen. Danke, dass Sie sich die Zeit genommen haben, es zu testen. Obwohl meine Installation ziemlich neu ist, werde ich versuchen zu aktualisieren und zu sehen, ob ich es dann ausführen kann :) –

+0

Gelöst! Danke, Daniel. Wenn Sie Ihren Vorschlag selbst als Antwort weiterleiten können, kann ich ihn als Lösung markieren. Ich habe noch wenig Ansehen, aber ich sollte das schaffen ... :) –

Antwort

0

Wie Daniel Falbel in seinem Kommentar darauf hinwies, bestand die Lösung darin, das R-Keras-Paket zu aktualisieren und dann die Tensorflow-Installation zu aktualisieren.

Allerdings Tensorflow-Paket in R war nicht die neueste Version 1.3 Tensorflow installieren (es war die 1.2-Version neu installieren).

Um dieses Problem zu beheben, kann die URL der richtigen Version an die Funktion install_tensorflow übergeben werden. Die URLs für die verschiedenen Implementierungen finden Sie unter here. Ich habe in diesem Fall Linux benutzt. Das Ausführen dieses Befehls sollte das Problem für jeden lösen, der auf das gleiche Problem stößt:

library(tensorflow) 
install_tensorflow(package_url = "https://pypi.python.org/packages/b8/d6/af3d52dd52150ec4a6ceb7788bfeb2f62ecb6aa2d1172211c4db39b349a2/tensorflow-1.3.0rc0-cp27-cp27mu-manylinux1_x86_64.whl#md5=1cf77a2360ae2e38dd3578618eacc03b") 
1

Ich versuchte GAN und bekam auch diesen Fehler. Wenn ich den gleichen Code auf der CPU-Version von Tensorflow verwende, war das ok, aber auf der GPU-Version war nicht.

Ich habe festgestellt, dass dieses Problem durch die Verwendung der kernel_regularizer Parameter auf der GPU-Version verursacht wurde. Sie können den Parameter entfernen und es erneut versuchen. Ich weiß nicht, warum das das Problem gelöst hat. Ich denke, es könnte ein Fehler bei der Verarbeitung von wiederverwendbaren Modellen sein.