2017-07-12 3 views
1

Ich versuche eine Tensorflow Op in einem Keras Modell zu verwenden. Ich habe vorher versucht, es mit einer Lambda-Schicht zu umhüllen, aber ich glaube, dass dies die Backpropagation dieser Ebenen verhindert.Tensorflow op in Keras Modell

Genauer gesagt, ich versuche, die Schichten von here in einem Keras-Modell zu verwenden, ohne es zu Keras-Schichten zu portieren (ich hoffe, später auf Tensorflow zu implementieren). Ich kann diese Schichten in einer geteilten Bibliotheksform zusammenstellen und diese in Python laden. Das gibt mir Tensorflow-Ops und ich weiß nicht, wie ich das in einem Keras-Modell kombinieren soll.

Ein einfaches Beispiel eines Keras MNIST Modells, wo zum Beispiel eine Conv2D Schicht durch eine tf.nn.conv2d Op ersetzt wird, wäre genau das was ich suche.

Ich habe this Tutorial gesehen, aber es scheint das Gegenteil von dem zu tun, was ich suche. Es scheint, Keras-Schichten in eine Tensorflusskurve einzufügen. Ich will genau das Gegenteil machen.

Mit freundlichen Grüßen, Hans

+0

Eine 'Lambda'-Schicht sollte die Backpropagation nicht deaktivieren. Was ist passiert, als du das versucht hast? – mrry

+0

Vielleicht habe ich falsch interpretiert, was passiert ist, aber ich modifizierte ein (funktionierendes) Keras MNIST-Beispiel, um tf ops zu verwenden (https://gist.github.com/hgaiser/9d38ac49424f400c161c8086ff864d08). Dieses Netzwerk schien nicht zu trainieren (0.1 acc.). Auch seine Zusammenfassung zeigt keine trainierbaren Parameter. Zur Verdeutlichung möchte ich nicht sagen, dass sich mein Netzwerk überhaupt nicht zurückspreizt, sondern dass die Lambda-Schichten nicht zur Rückpropagation beitragen. Wenn das Netzwerk nur aus Lambda-Layern besteht, gibt es überhaupt kein Training. –

Antwort

1

Etwa 2 Wochen sind vergangen, und es scheint, ich bin in der Lage jetzt meine eigene Frage zu beantworten.

Es scheint, als ob Tensorflow Gradienten nachschlagen kann, wenn Sie sie mit this Decorator registrieren. Zum Zeitpunkt des Schreibens ist diese Funktionalität (noch) nicht in C++ verfügbar, und genau das habe ich gesucht. Eine Problemumgehung wäre, eine normale Operation in C++ zu definieren und sie in eine Python-Methode mit dem erwähnten Decorator zu integrieren. Wenn diese Funktionen mit entsprechenden Gradienten bei Tensorflow registriert sind, wird die Rückpropagierung "automatisch" erfolgen.