Ich möchte eine benutzerdefinierte Ebene schreiben, wo ich eine Variable im Speicher zwischen Läufen behalten kann. Zum BeispielPersistente Variable in Keras Benutzerdefinierte Ebene
class MyLayer(Layer):
def __init__(self, out_dim = 51, **kwargs):
self.out_dim = out_dim
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
a = 0.0
self.persistent_variable = K.variable(a)
self.built = True
def get_output_shape_for(self, input_shape):
return (input_shape[0], 1)
def call(self, x, mask=None):
a = K.eval(self.persistent_variable) + 1
K.set_value(self.persistent_variable, a)
return self.persistent_variable
m = Sequential()
m.add(MyLayer(input_shape=(1,)))
Wenn ich laufe m.predict
erwarte ich, dass die persistent_variable
aktualisiert werden, und der erhöhte Wert drucken. Aber es sieht aus wie es immer druckt 0
# Dummy input
x = np.zeros(1)
m.predict(x, batch_size=1)
Meine Frage ist, wie kann ich das persistent_variable
Schritt und speichern nach jedem Lauf von m.predict
Danke, Naveen
Hallo Phylliida, Sieht wie die richtige Lösung. Aber es funktioniert manchmal nicht. Ich lief 'a = model.predict (np.random.rand (100, 10), batch_size = 1) drucken (a)' '[0. 1. 2. 3. 5. 6. 6. 7 9. 10. 10. 11. ....] ' Manchmal fehlt es Update. –
Huh, es könnte eine Art Race Condition sein. Ich weiß es wirklich nicht leid, wir können warten, um zu sehen, ob jemand anderes weiß – Phylliida
Sie haben Recht. In Keras könnte es eine Wettlaufsituation geben. Ich habe eine 'RepeatVector' Schicht nach' CounterLayer' hinzugefügt, und es hat funktioniert. –