Ich habe ein Netzwerk in Tensorflow, und ich möchte eine Funktion definieren, die ihre Eingabe über eine tf.layers.dense
Ebene (offensichtlich, die gleiche) gibt. Ich sehe das Argument reuse
, aber um es richtig verwenden zu können, scheint es, dass ich eine globale Variable behalten muss, nur um mich zu erinnern, ob meine Funktion bereits aufgerufen wurde. Gibt es einen saubereren Weg?Wie kann ich eine Dense-Ebene wiederverwenden?
Antwort
Soweit ich weiß, gibt es keinen saubereren Weg. Das Beste, was wir tun können, ist tf.layers.dense
in unsere Abstraktion wickeln und es als Objekt verwenden, variable scope ‚s Backbone versteckt:
def my_dense(*args, **kwargs):
scope = tf.variable_scope(None, default_name='dense').__enter__()
def f(input):
r = tf.layers.dense(input, *args, name=scope, **kwargs)
scope.reuse_variables()
return r
return f
a = [[1,2,3], [4,5,6]]
a = tf.constant(a, dtype=tf.float32)
layer = my_dense(3)
a = layer(a)
a = layer(a)
print(*[[int(a) for a in v.get_shape()] for v in tf.trainable_variables()])
# Prints: "[3, 3] [3]" (one pair of (weights and biases))
Sie können die Schicht gegen eine Konstante der richtigen Größe konstruieren und das Ergebnis ignorieren.
Auf diese Weise wird die Variable deklariert, aber die Operation sollte aus dem Graphen herausgeschnitten werden.
Zum Beispiel
tf.layers.dense(tf.zeros(1, 128), 3, name='my_layer')
... later
hidden = tf.layers.dense(input, 3, name='my_layer', reuse=True)
Ich finde tf.layers.Dense sauberer als die oben genannten Antworten. Alles, was Sie brauchen, ist ein Denses Objekt, das Sie vorher definiert haben. Dann können Sie es beliebig oft wiederverwenden.
import tensorflow as tf
# Define Dense object which is reusable
my_dense = tf.layers.Dense(3, name="optional_name")
# Define some inputs
x1 = tf.constant([[1,2,3], [4,5,6]], dtype=tf.float32)
x2 = tf.constant([[4,5,6], [7,8,9]], dtype=tf.float32)
# Use the Dense layer
y1 = my_dense(x1)
y2 = my_dense(x2)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
y1 = sess.run(y1)
y2 = sess.run(y2)
print(y1)
print(y2)
Tatsächlich tf.layers.dense
Funktion konstruiert intern ein dichtes Objekt und geben Sie Ihre Eingabe in das Objekt. Weitere Informationen finden Sie unter code.
- 1. Wie kann ich InputStreams wiederverwenden?
- 2. Wie kann ich HttpUrlConnection wiederverwenden?
- 3. Wie kann ich meinen Scanner wiederverwenden?
- 4. Wie kann ich ein View-Objekt wiederverwenden?
- 5. Wie kann ich diese Android-Taste wiederverwenden?
- 6. Wie kann ich die Wo-Bedingung wiederverwenden?
- 7. Wie kann ich eine HttpClient-Verbindung effizient wiederverwenden?
- 8. Kann ich ein HttpWebRequest wiederverwenden?
- 9. Wie kann ich Komponenten in ExtJS wiederverwenden?
- 10. Wie kann ich UIView Swift wiederverwenden?
- 11. Wie kann ich Serverkonfigurationen in nginx wiederverwenden?
- 12. Kann ich eine UserTransaction-Instanz nach commit() wiederverwenden?
- 13. Kann ich eine vorhandene Verbindungszeichenfolge in meiner SQL-Sitzungsstatuskonfiguration wiederverwenden?
- 14. Kann ich meinen bestehenden TCP-Server wiederverwenden?
- 15. Warum kann ich nicht wiederverwenden „Unapply“ ohne
- 16. Kann ich Testdaten als Trainingsdaten wiederverwenden?
- 17. Kann ich ein Mercurial-Konfigurationselement wiederverwenden?
- 18. Eine ClearCase-Ansicht wiederverwenden
- 19. Wie kann ich Build Parameter über mehrere Jenkins Jobs wiederverwenden?
- 20. Wie kann ich Ausnahmebehandlungscode für mehrere Funktionen in Python wiederverwenden?
- 21. Wie kann ich HTML/JSP innerhalb einer Seite wiederverwenden?
- 22. Netty: Wie kann ich die gleiche `FullHttpResponse` wiederverwenden?
- 23. Wie kann ich ein Bootstrap Modal Div wiederverwenden?
- 24. Wie kann eine untergeordnete Schnittstelle die Implementierungen ihrer Eltern wiederverwenden?
- 25. Wie kann ich ein XML-Dokument in mehreren Aufrufen wiederverwenden?
- 26. Wie kann ich ScriptContext wiederverwenden (oder anderweitig die Leistung verbessern)?
- 27. Wie kann ich einen Pfad mit Transformationen in animateMotion wiederverwenden?
- 28. Wie kann ich benannte Bereiche in Rails gruppieren/wiederverwenden?
- 29. Wie kann ich einen Bildschirm für mehrere Aktivitäten wiederverwenden?
- 30. TensorFlow: Wie kann ich Adam-Optimizer-Variablen wiederverwenden?
Wow, das ist sauber. Viel sauberer als das Durcheinander, bei dem ich gelandet bin! – Akiiino
Sie sollten einen Namen an "my_dense" übergeben, damit dieser Trick für verschiedene Ebenen verwendet werden kann. – Sorin